1、简述kmeans流程,并且简述使用场景?
2、简述K-means对异常值是否敏感?
3、如何评估聚类效果?超参数k如何选择?
4、如何用mapreduce分布式实现K-means算法?
5、kmeans算法的优缺点,如何改进K均值算法?
6、证明Kmeans的收敛性
1、简述kmeans流程,并且简述使用场景?
Kmeans适用于无监督聚类场景
(1)数据预处理、离群点处理,聚类中心个数K设定
(2)设定K个聚类簇的中小点
(3)定义代价函数:各个样本对应簇中心点的距离和
(4)对于每个样本点,计算与之距离最近的簇中心,并赋予簇标签,计算代价函数;然后重新计算每个簇的中心点
(5)直到训练停止,及每个样本对应簇不改变,代价函数收敛,达到迭代最大次数等条件
2、简述K-means对异常值是否敏感?
是的,异常值会导致簇中心点偏移,导致均值所计算出来的中心位置不能够 反映真实的类中心。
3、如何评估聚类效果?超参数k如何选择?
通过设定聚类效果的metric如代价函数误差平方和,通过尝试不同的K或者经验选择,选择代价函数最小的情况下的K取值
聚类效果的评估metric:各种聚类评估指标,类内距离近类间距离远
超参数K的选择:手肘法经验尝试,Gap Statistic适用于批量化作业
4、如何用mapreduce分布式实现K-means算法?
(1)根据原始文件生成随机聚类中心向量(需指定聚类中心向量个数 k),指定循环次数;
(2)在 map 阶段,setup 函数读取并初始化聚类中心向量;在 map 函数中读取每个记录,计算当前记录到各个聚类中心向量的距离,根据到聚类中心向量最小的聚类中心 id 判断该记录属于哪个类别,输出所属聚类中心 id 和当前记录;
(3) 在 reduce 阶段,reduce 函数接收相同聚类中心 id 的数据;把这些数据的每列进行求和,并记录每列的个数;计算新的聚类中心向量(每列的和除以每列的个数),然后输出聚类中心 id 和新的聚类中心向量;
(4) 判断前后两次聚类中心向量之间的误差是否小于某阈值;如果小于,则跳转到步骤 5),否则跳转到步骤 2);
(5) 针对最后一次生成的聚类中心向量对原始数据进行分类,得到每个记录的类别。
5、kmeans算法的优缺点,如何改进K均值算法?
缺点:
(1)需要人工定义初始值K,且该值与真实分布未必契合
(2)K均值只能收敛到局部最优,而非全局最优
(3)已受到噪声点的影响
(4)样本点只能被划分到单一的类别中
优点:
(1)方法简单直接
(2)对于大数据集,局部最优基本能够达到较好效果
(3)复杂度接近线性O(NKt) N为数据样本量 K为聚类中心数 t为迭代轮数
改进K均值算法
(1)Kmeans++选取初始值的时候,有更高概率选择已选簇中心更远的点
(2)ISODATA算法,存在分裂和合并的操作,合并类别内样本太少的情况;分裂类别内方差太大的情况