EM算法
K-Means的迭代过程其实是一种EM算法。Expectation-Maximization algorithm,简而言之,就是根据初始化的参数,利用最大似然估计,估计出数据的情况,再根据数据的分布反过来更新参数,两个过程相互迭代的过程。
K-Means
前提
基于欧式距离的 K-means 假设了各个数据簇的数据具有一样的先验概率并呈现球形分布
流程
注意,不是一个点一个点加进去的,计算所有点属于哪个簇和根据数据点的分类变化更新质心这两个过程迭代进行。
K值的选取
- 手肘法(多次选取不同的K值,计算损失函数,找到K-Loss曲线的转折点)
- Gap Statistic法:设分簇后的损失函数为 D K D_{K} DK,Gap Statistic定义为 Gap ( K ) = E ( log D K ) − log D K \operatorname{Gap}(K)=E\left(\log D_{K}\right)-\log D_{K} Gap(K)=E(logDK)−logDK,可以看成随机样本的损失与实际样本的损失之差, Gap ( K ) \operatorname{Gap}(K) Gap(K)越大,就反映实际数据的损失函数越小。 E ( log D K ) E\left(\log D_{K}\right) E(logDK)表示随机样本的期望,通过蒙特卡洛模拟得到。多次产生和原始数据数量相同的随机样本,计算 D K D_{K} DK,得到 E ( log D K ) E\left(\log D_{K}\right) E(logDK)。
缺点
- 需要人工预先确定初始K值,且该值和真实的数据分布未必吻合
- K均值只能收敛到局部最优,效果受到初始值很大
- 易受到噪点、离群值的影响
- 样本点只能被划分到单一的类中,不能多分类
改进
- 采用核函数,高维球形分布的数据并不常见,通过核函数,在新的空间内聚类
- K-means++,初始化时逐个选取聚类中心,选取下一个聚类中心时候,距离当前已有聚类中心越远的点越有希望被选取
- ISODATA,在原始K-means算法的基础之上,在迭代时候增加了两个操作,一是分裂操作,当某一簇方差超过一定阈值,就将该簇分裂成两个簇;二是合并操作,如果两个簇的质心相距很近,就合并这两个簇。
小波聚类WaveCluser
一趟聚类算法
流程
- 初始时,类的集合为空
- 逐个读入样本
- 分两种情况
- 如果当前没有类 或者 新读入的样本和已有类的距离都过远(最小的距离都大于阈值r),就以该样本新建类。
- 如果新读入的样本 能够并入已有的类,就将新样本加入该类,并更新该类的中心。
- 重复2和3,直到读取完毕全部数据
阈值的选取
- 在数据集中随机抽取n对样本
- 计算每对样本间的距离,即得到n个距离
- 计算这n个距离的 E E E和 D D D,取 E − 2 D < r < E + 0.25 D E-2D<r<E+0.25D E−2D<r<E+0.25D
算法特点
对噪声不敏感,在大规模数据下比较高效
数据的录入顺序对结果影响较大
对超球状分布的数据有良好的识别,对凸型数据分布识别较差