k-means:
伪代码:
创建k个点作为起始中心点(随机选择)
当任意一个点的簇分配结果发生改变时
对数据种的每个数据点
对每个质心
计算质心与数据点之间的距离
将数据点分配到距离最近的簇
对每个簇,计算簇种所有点的均值并将其作为质心
距离计算:欧式距离
停止条件:直到数据点的簇分配不再改变
评价方法:误差平方和(SSE)
后处理优化方法:
1.将最大SSE值的簇划分为两个簇,具体实现是将最大簇包含的点过滤出来,再其上运行K-means算法(k = 2)
2.合并距离最近的两个质心/合并两个使得SSE增幅最小的质心
算法改进:
(1)二分K-mean
先将数据看成一个簇,然后将其一分为2,选择可以最大降低SSE值的簇继续划分,直到达到用户指定的簇数目
伪代码:
将所有数据看成一个簇
当簇的数目小于K时
对于每一个簇
计算簇的误差
在给定的簇上进行K-means(k = 2)
计算将该簇一分为二之后的误差
选择使误差更小的簇继续划分(或SSE最大的簇进行划分)
(2)k-means++:初始随机点尽可能的远,方法使n+1个点中心点选择时,对于前n个点选择到的概率更大
(3)mini batch kemans:每次只用一个子集重入类并找到类心
(4)ISODATA:对于K值比较难选取,当下类样本较小时,剔除;类下样本较多时拆分
(5)kernl k-mean:距离计算方式换成核函数映射到高维空间再聚类
异常值处理:
(1)软聚类剔除(不常用)
(2)局部异常因子
(3)多元高斯分布异常点检测:
(4)PCA/自编码机进行异常点检测
评估算法精度指标:
a. 外部法(基于有标注):Jaccard系数、纯度(信噪比-)
b. 内部法(无标注):内平方和WSS,外平方和BSS
c. 此外还要考虑到算法的时间空间复杂度、聚类稳定性等