关于kmeans的算法遇到有几个问题。还未解决,写个博客mark一下,也欢迎各位高手指点~
-
中心点选取
在随机选取情况下,Kmeans算法可以实现,且优点为第一次选取中心点时,由于选择随机选取的算法,时间复杂度不高。但缺点为会出现两个中心点间隔近,k=4时,出现的结果和现象不符,如下图所示。
猜测:和点密集的聚集在(12,0)的领域,故两个中心点出现在同一簇。 -
手肘法拐点的选取
随着分类的类别数增加,SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,手肘法即为选取那个拐点。
实际上拐点的确不好确定,查阅多份网络博客,均采用目测法。但从斜率变化角度来看,下图中,k=2-3的斜率和k=3-4的斜率用目测法难以比较,趋于平缓的拐点任可以看出。从该角度看,斜率前后变化的参考价值低一些,以斜率基本不变作为判断拐点的依据更佳。
基于上述的思想,可采取斜率判断法来选取拐点:找出第一个与下一个点之间斜率小于1(选取一个较小的常数即可,本实验选取为1)的点作为拐点。
优点:可用代码实现,可避免目测带来的误差。
缺点:面对斜率变化有波动的情况,该方法会出现误判拐点,如下图:
缺点的改进:可多加一层判断,当下一段斜率小于1,判断第二段的斜率是否任小于1,若斜率变化大,则不能选取为拐点。或者由判断一段线段斜率小于1,增加为判断连续多段线段的斜率均小于1,可达到更好的选取效果。