pandas dataframe对象是否可以与sklearn kmeans聚类一起使用?

Dar*_*ght 30 python cluster-analysis k-means pandas scikit-learn

数据集是pandas数据帧.这是sklearn.cluster.KMeans

 km = KMeans(n_clusters = n_Clusters)

 km.fit(dataset)

 prediction = km.predict(dataset)
Run Code Online (Sandbox Code Playgroud)

这就是我如何决定哪个实体属于哪个集群:

 for i in range(len(prediction)):
     cluster_fit_dict[dataset.index[i]] = prediction[i]
Run Code Online (Sandbox Code Playgroud)

这就是数据集的外观:

 A 1 2 3 4 5 6
 B 2 3 4 5 6 7
 C 1 4 2 7 8 1
 ...
Run Code Online (Sandbox Code Playgroud)

其中A,B,C是指数

这是使用k-means的正确方法吗?

use*_*666 28

假设数据框中的所有值都是数字,

# Convert DataFrame to matrix
mat = dataset.values
# 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
Run Code Online (Sandbox Code Playgroud)

或者,您可以尝试KMeans ++ for Pandas.

  • 请注意,创建结果的更好方法是`results = pd.DataFrame(data = labels,columns = ['cluster'],index = collapsed.index)`,这样就不需要转置,添加正确的索引和标签 (2认同)
  • @FooBar是什么折叠/塌陷索引? (2认同)

ogr*_*sel 16

要知道您的数据帧dataset是否具有合适的内容,您可以显式转换为numpy数组:

dataset_array = dataset.values
print(dataset_array.dtype)
print(dataset_array)
Run Code Online (Sandbox Code Playgroud)

如果数组具有同质数字dtype(通常numpy.float64),则scikit-learn 0.15.2及更高版本应该没问题.例如,您可能仍需要规范化数据sklearn.preprocessing.StandardScaler.

如果您的数据框是异构类型的dtype,那么相应的numpy数组将object不适合scikit-learn.您需要提取所有相关要素的数值表示(例如,通过提取分类要素的虚拟变量)并删除不合适的要素列(例如样本标识符).