我必须在数据集上使用k表示聚类(我正在使用Scikit学习),如下所示
但是当我应用K意味着它并没有像我们预期的那样给我质心。并且分类不正确。 如果我想知道在scikit学习中没有正确分类的要点,那么会有什么想法。 这是代码。
header.container {
overflow: visible;
z-index: 2;
position: relative // without this sometime z-index doesnt work
}
这里Train_data是pandas框架,有2个功能和3500个样本,代码给出了以下内容。
我可能因为初始质心选择不当而发生了什么,但可能是什么解决方案呢?
答案 0 :(得分:1)
首先,我希望您注意到X和Y轴上的范围在两个图中都不同。所以,第一个质心(按X值排序)并没有那么糟糕。由于存在大量异常值,因此获得了第二个和第三个。他们可能每个都占据最右边的一半。此外,k-means的输出取决于质心的初始选择,因此请查看不同的运行或将init参数设置为随机可以改善结果。提高效率的另一种方法是去除距离d的半径内具有少于n个邻居的所有点。为了有效地实现这一点,您可能需要一个kd树,或者只需使用sklearn提供的DBSCAN,看看它是否更好。
K-Means ++也可能选择异常值作为初始集群,如here所述。因此,您可能希望将KMeans中的init参数更改为“随机”并执行多次运行并获取最佳质心。
对于您的数据,因为它是2-D,很容易知道点是否被正确分类。使用鼠标“拾取”近似质心的坐标(参见here),然后将从拾取坐标获得的聚类与从k-means获得的聚类进行比较。
答案 1 :(得分:1)