【问题标题】:Will pandas dataframe object work with sklearn kmeans clustering?pandas 数据框对象将与 sklearn kmeans 聚类一起使用吗?
【发布时间】:2015-03-17 00:19:32
【问题描述】:

数据集是熊猫数据框。这是 sklearn.cluster.KMeans

 km = KMeans(n_clusters = n_Clusters)

 km.fit(dataset)

 prediction = km.predict(dataset)

这就是我决定哪个实体属于哪个集群的方式:

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

这是数据集的样子:

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

其中 A,B,C 是索引

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

【问题讨论】:

  • 您的问题有点不清楚,sklearn 通常接受 numpy 数组作为输入,因此 pandas 数据帧是兼容的,在某些情况下我发现您需要返回一个 numpy 数组:df.values或 df.col.values` 作为示例,所以基本上它应该可以工作,请尝试,如果遇到障碍,请返回代码和数据

标签: python pandas scikit-learn cluster-analysis k-means


【解决方案1】:

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

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

如果数组具有齐次数值 dtype(通常为 numpy.float64),那么对于 scikit-learn 0.15.2 及更高版本应该没问题。例如,您可能仍需要使用 sklearn.preprocessing.StandardScaler 规范化数据。

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

【讨论】:

    【解决方案2】:

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

    # 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
    

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

    【讨论】:

    • 请注意,创建结果的更好方法是results = pd.DataFrame(data=labels, columns=['cluster'], index=collapsed.index) ,它无需转置,添加适当的索引和标签
    • @FooBar 什么是折叠/折叠的.index?
    • dataset.as_matrix() 已弃用,请使用 Dataset.values intead pandas.pydata.org/pandas-docs/stable/generated/…
    猜你喜欢
    • 2019-05-02
    • 2018-02-05
    • 2017-10-05
    • 2018-06-14
    • 2013-12-11
    • 2016-09-09
    • 2019-03-14
    • 2019-11-22
    • 2017-10-04
    相关资源
    最近更新 更多