2015-01-19 25 views
20

tập dữ liệu là pandas dataframe. Đây là sklearn.cluster.KMeansĐối tượng dữ liệu pandas dataframe có hoạt động với nhóm cụm từ sklearn hay không?

km = KMeans(n_clusters = n_Clusters) 

km.fit(dataset) 

prediction = km.predict(dataset) 

Đây là cách tôi quyết định thực thể thuộc về mà cụm:

for i in range(len(prediction)): 
    cluster_fit_dict[dataset.index[i]] = prediction[i] 

Đây là cách tập dữ liệu trông:

A 1 2 3 4 5 6 
B 2 3 4 5 6 7 
C 1 4 2 7 8 1 
... 

trong đó A, B , C là chỉ số

Đây có phải là cách chính xác để sử dụng k-means không?

+1

Câu hỏi của bạn có một chút không rõ ràng, sklearn chấp nhận các mảng numpy như đầu vào nói chung và do đó các khung dữ liệu gấu trúc tương thích, trong một số trường hợp tôi thấy rằng bạn cần yêu cầu mảng trở lại như sau: 'df.values' hoặc df. col.values' là một ví dụ, vì vậy về cơ bản nó sẽ hoạt động, hãy thử và nếu bạn nhấn một snag trở lại với mã và dữ liệu – EdChum

Trả lời

12

Để biết nếu dataframe bạn dataset có nội dung phù hợp bạn một cách rõ ràng có thể chuyển đổi sang một mảng NumPy:

dataset_array = dataset.values 
print(dataset_array.dtype) 
print(dataset_array) 

Nếu mảng có đồng nhất số dtype (thường numpy.float64) sau đó nó nên được tốt cho scikit-học 0,15.2 và sau đó. Bạn có thể vẫn cần chuẩn hóa dữ liệu với ví dụ sklearn.preprocessing.StandardScaler.

Nếu khung dữ liệu của bạn được nhập không đồng nhất, dtype của mảng numpy tương ứng sẽ là object không phù hợp để tìm hiểu. Bạn cần trích xuất biểu diễn bằng số cho tất cả các tính năng có liên quan (ví dụ bằng cách trích xuất các biến giả cho các đối tượng phân loại) và thả các cột không phải là các đối tượng địa lý phù hợp (ví dụ: số nhận dạng mẫu).

17

Giả sử tất cả các giá trị trong dataframe là số,

# Convert DataFrame to matrix 
mat = dataset.as_matrix() 
# Using sklearn 
km = sklearn.cluster.KMeans(n_clusters=5) 
km.fit(mat) 
# Get cluster assignment labels 
labels = km.labels_ 
# Format results as a DataFrame 
results = pandas.DataFrame([dataset.index,labels]).T 

Ngoài ra, bạn có thể thử KMeans++ for Pandas.

+2

Lưu ý rằng cách tốt hơn để tạo kết quả là 'results = pd.DataFrame (data = labels , columns = ['cluster'], index = collapsed.index) ', loại bỏ nhu cầu chuyển vị trí, thêm chỉ mục và nhãn thích hợp – FooBar

+0

@FooBar những gì được thu gọn/collapsed.index? –

Các vấn đề liên quan