K means好像对数据没有什么要求,但是有时候感觉效果就是很不好。请问K means对数据的分布有要求吗?需要符合哪些前提假设?
4个回答
我知道的要求数据集是凸数据集,就是数据集内任意两点的连线上所有的点都在数据集内,否则分类效果就很差,这时候DBSCAN就比较合适了
感谢回复,这个图的例子很好,谢谢
-
有故事的董同学
2018-11-23 11:05
K means没有严格的前提要求,但是如果数据不符合下面三个要求的话,K means得到的结果可能会比较奇怪:
1. 数据中每个变量的方差基本上要一样
2. 每一个cluster中每个变量都是近似正态分布(或者众数等于中位数的对称分布)
3. 每一个cluster中的元素个数要几乎一样
条件1和2就几乎保证了每个cluster看起来像是球形(而不是椭球形),而且是图的。
为什么条件3也很重要呢,可以看下面这个例子,尽管我们肉眼能看出三个稀疏程度不同的球状簇,但是K means却分成了三个样本数量相似的三个簇
既然说起聚类了,我倒真有些疑惑。
其实聚类的算法算的上比较简单的,解释性也算是比较好的。
但往往真实的业务场景会遇到一些问题,
我曾经就有些问题:
1。聚类共通性的问题,变量需要自己去确定,类别需要自己的决定,当然这个是历史遗留问题。算是老生常谈
2。真实的数据分布问题,我就遇到一个,大量的为0值,我就在想,0值要不要删,毕竟0值不像异常值,他也是代表大众化的数值。
3.因为0值的原因,以及非零值的离散过大。导致标准差也很大,量钢化之后整数据分布看起来依然很诡异,我还在这个情况会不会影响算法的收敛稳定,不过聚了几次,发现也挺稳定的
4.类别的问题,上面有一个说要类别差不多,真实的数据集不可能给你这种情况,低价值用户不必然是异常的多,同时其他类别的也是阶梯性的减少
SofaSofa数据科学社区DS面试题库 DS面经