【发布时间】:2016-05-07 18:35:23
【问题描述】:
我需要将一个简单的单变量数据集聚类到预设数量的聚类中。从技术上讲,它更接近于对数据进行分箱或排序,因为它只是一维的,但我的老板称之为聚类,所以我将坚持使用这个名称。 我当前使用的系统使用的方法是 K-means,但这似乎有点过头了。
有没有更好的方法来执行这项任务?
其他一些帖子的答案提到了 KDE(内核密度估计),但这是一种密度估计方法,它是如何工作的?
我看到了 KDE 如何返回密度,但我如何告诉它将数据拆分为 bin?
我如何拥有独立于数据的固定数量的 bin(这是我的要求之一)?
更具体地说,如何使用 scikit learn 实现这一目标?
我的输入文件如下所示:
str ID sls
1 10
2 11
3 9
4 23
5 21
6 11
7 45
8 20
9 11
10 12
我想将 sls 编号分组到簇或箱中,这样:
Cluster 1: [10 11 9 11 11 12]
Cluster 2: [23 21 20]
Cluster 3: [45]
我的输出文件将如下所示:
str ID sls Cluster ID Cluster centroid
1 10 1 10.66
2 11 1 10.66
3 9 1 10.66
4 23 2 21.33
5 21 2 21.33
6 11 1 10.66
7 45 3 45
8 20 2 21.33
9 11 1 10.66
10 12 1 10.66
【问题讨论】:
-
k-means 有什么问题?性能?
-
kmeans 比 kde 更高效
-
@DavidMaust 1) 当我尝试在单变量数据上运行 sklearn 的 k-means 时,我开始遇到错误。我不得不通过将它聚集在 2d 数据上来欺骗它,这是原始 1d 数据的相同副本。 2)根据这个post这是一个坏主意。
-
@lejlot 查看我对 David Maust 的回复。
-
你试过写一些代码吗?
标签: machine-learning scikit-learn cluster-analysis data-mining kernel-density