K 表示聚类在大小不均的集群上
K means clustering on unevenly sized clusters
我必须在数据集上使用 k 均值聚类(我正在使用 Scikit 学习),如下所示
但是当我应用 K 意味着它没有给我预期的质心。并且分类不正确。
另外,如果我想知道在 scikit 学习中没有正确分类的点,会有什么想法。
这是代码。
km = KMeans(n_clusters=3, init='k-means++', max_iter=300, n_init=10)
km.fit(Train_data.values)
plt.plot(km.cluster_centers_[:,0],km.cluster_centers_[:,1],'ro')
plt.show()
这里 Train_data 是 pandas 框架,有 2 个特征和 3500 个样本,代码如下。
我可能是因为初始质心选择不当而发生的,但解决方案是什么?
首先,我希望您注意到两个图中 X 轴和 Y 轴的范围不同。所以,第一个质心(按 X-value 排序)还不错。第二个和第三个是因为有大量异常值而得到的。他们可能各占了最右边两个集群的一半。此外,k-means 的输出取决于质心的初始选择,因此请查看不同的运行或将初始参数设置为随机是否会改善结果。另一种提高效率的方法是删除距离 d 半径内所有少于 n 个邻居的点。要有效地实现它,您可能需要 kd-tree 或者只使用 sklearn 提供的 DBSCAN 并查看它是否更好。
此外 K-Means++ 可能会选择异常值作为初始聚类,如 here 所述。因此,您可能希望将 KMeans 中的初始参数更改为 'random' 并执行多次运行并采用最佳质心。
对于您的数据,因为它是二维的,所以很容易知道点是否被正确分类。使用鼠标 'pick' 向上近似质心的坐标(参见 here),并将从选取的坐标获得的聚类与从 k-means.
获得的聚类进行比较
我找到了解决方案。
问题是缩放。
我只是使用
缩放了两个轴
sklearn.preprocessing.scale
这是我的结果
我必须在数据集上使用 k 均值聚类(我正在使用 Scikit 学习),如下所示
但是当我应用 K 意味着它没有给我预期的质心。并且分类不正确。 另外,如果我想知道在 scikit 学习中没有正确分类的点,会有什么想法。 这是代码。
km = KMeans(n_clusters=3, init='k-means++', max_iter=300, n_init=10)
km.fit(Train_data.values)
plt.plot(km.cluster_centers_[:,0],km.cluster_centers_[:,1],'ro')
plt.show()
这里 Train_data 是 pandas 框架,有 2 个特征和 3500 个样本,代码如下。
我可能是因为初始质心选择不当而发生的,但解决方案是什么?
首先,我希望您注意到两个图中 X 轴和 Y 轴的范围不同。所以,第一个质心(按 X-value 排序)还不错。第二个和第三个是因为有大量异常值而得到的。他们可能各占了最右边两个集群的一半。此外,k-means 的输出取决于质心的初始选择,因此请查看不同的运行或将初始参数设置为随机是否会改善结果。另一种提高效率的方法是删除距离 d 半径内所有少于 n 个邻居的点。要有效地实现它,您可能需要 kd-tree 或者只使用 sklearn 提供的 DBSCAN 并查看它是否更好。
此外 K-Means++ 可能会选择异常值作为初始聚类,如 here 所述。因此,您可能希望将 KMeans 中的初始参数更改为 'random' 并执行多次运行并采用最佳质心。
对于您的数据,因为它是二维的,所以很容易知道点是否被正确分类。使用鼠标 'pick' 向上近似质心的坐标(参见 here),并将从选取的坐标获得的聚类与从 k-means.
获得的聚类进行比较我找到了解决方案。 问题是缩放。 我只是使用
缩放了两个轴sklearn.preprocessing.scale
这是我的结果