【问题标题】:sklearn specifying number of clusterssklearn 指定簇数
【发布时间】:2018-12-07 22:40:59
【问题描述】:

对于 sklearn 中的聚类算法,有没有办法指定您希望算法找到多少个聚类(而不是算法找到自己的聚类数)?根据我输入的数据,我希望得到 2 个集群,而不是它为我输出的 3 个集群。

如果有帮助,我正在使用 MeanShift 算法(但我的问题适用于所有算法)。此外,大多数教程似乎都使用 make_blobs,但我使用 pandas 的 read_csv 来上传我的数据,而不是如果这有任何改变。

这是我的代码的开始部分:

df = pd.read_csv(filename, header = 0)
original_headers = list(df.columns.values)
df = df._get_numeric_data()
data = df.values
ms = MeanShift()
ms.fit(data)
labels = ms.labels_
cluster_centers = ms.cluster_centers_
n_clusters_ = len(np.unique(labels))
print("Number of estimated clusters:", n_clusters_)

【问题讨论】:

  • 不可以,MeasShift中不能设置簇数。您可以尝试设置 bandwidth 参数,但仍然可能无法获得 2 个集群。如果你可以使用其他算法,then check others here,其中大多数都有一个参数n_clusters,你可以设置它来获得那么多集群。
  • @VivekKumar 我建议将其发布为答案 - 毕竟,它确实回答了问题
  • @desertnaut 我不愿以当前形式将此作为答案发布,因为我不知道如何配置MeanShift 中的参数以获得 OP 想要的 2 个集群。所以我建议使用其他算法。一旦 OP 对此作出答复并感到满意,就会这样做。
  • @VivekKumar 如果其他算法确实将我的数据拆分为正确的集群(我认为它确实如此),那么它一定会回答我的问题 :)
  • KMeans 运行良好!

标签: python scikit-learn hierarchical-clustering sklearn-pandas


【解决方案1】:

正如上面一些用户所说,MeanShift算法中无法设置想要的簇数。

当我们谈论集群时,根据您的问题可以使用很多模型。基于密度的模型,如MeanShiftDBSCAN,试图找到比数据集其余部分密度更高的区域。因此,聚类的数量将由数据本身定义。

另一方面,例如,K-Means 等基于质心的方法会根据作为参数传递的质心数开始迭代。

以下链接展示了sklearn的很多聚类算法。尝试找出最适合您的问题的方法。

http://scikit-learn.org/stable/auto_examples/cluster/plot_cluster_comparison.html

参考资料:

https://towardsdatascience.com/the-5-clustering-algorithms-data-scientists-need-to-know-a36d136ef68

https://en.wikipedia.org/wiki/Cluster_analysis

【讨论】:

    猜你喜欢
    • 2021-03-03
    • 2020-09-24
    • 2017-03-13
    • 1970-01-01
    • 2018-12-01
    • 2019-03-26
    • 1970-01-01
    • 2018-08-25
    • 2015-01-05
    相关资源
    最近更新 更多