聚类是无监督学习中最常用的算法。
层次聚类
也称为凝聚的聚类算法,最后可以生成一个聚类的图,但Python中不容易生成这种图,一般直接在界面软件中生成。
有自顶而下和自底向上两种,只是过程相反
自顶而下聚类:
(1)计算所有的样本和样本之间的距离,找到离得最近的两个样本聚成一类。
(2)将上面的小类看做一个新的样本,再选择这个类中的每个样本与剩下的样本的最小距离作为这个新样本与剩下样本的距离,将距离最小的样本再聚成一类,依次类推。
(3)直到最终聚成一类。
距离计算:马氏距离
类间距的计算:
1)最短距离:将两个类之间最小的两个样本点的距离作为类间距
2)最长距离:将两个类之间最大的两个样本点的距离作为类间距
3)中心距离:将一个类内所有样本的均值和另一个类内所有样本的均值之间的距离作为类间距
4)平均距离:将一类与另一类中任意两个样本之间距离的平均值作为类间距
优点:不需要确定K值,可根据主观划分,决定分成几类。
缺点:计算量特别大。与K-means相比两者的区别,除了计算速度,还有K-means只产出一个聚类结果和层次聚类可根据你的聚类程度不同有不同的结果。
K-means(K均值)聚类
K-means聚类算法:
(1)随机选择K个初始点作为质心;
(2)计算质心与数据点之间的距离,将数据点分配到距其最近的类;
(3)对于每个类,计算类中所有数据的均值,将其作为新类的质心;
(4)重复(2)和(3)两步,直到直到类中的样本点不再变化。
参数及其优化:
(1)K值:可采用肘部法,选择突变处的K值
(2)初始质心:随机选择一个样本点,计算所有样本和其之间的距离,选择距离最大的那个样本点作为另一个质心,若K>3,则可计算这两个样本点的中心距离,再计算剩余样本点与这个中心距离距离最小的样本作为第三个质心,以此类推。
评价K-means的聚类效果:
在保持K不变的情况下,用于度量聚类效果的指标是SSE(误差平方和),SSE越小表示表示数据越接近质心,聚类效果也越好。
优点:速度快,适合发现球形聚类,可发现离群点
缺点:
1)对初始聚类中心敏感,缓解方案是多初始化几遍,选取损失函数小的;
2)必须提前指定K值(指定的不好可能得到局部最优解),缓解方法,多选取几个K值,grid search选取几个指标评价效果情况;
3)属于硬聚类,每个样本点只能属于一类 ;
4)对异常值免疫能力差,可以通过一些调整(不取均值点,取均值最近的样本点);
5)对团状数据点区分度好,对于带状不好(谱聚类或特征映射)。
实际应用:
尽管K均值聚类有很多缺点,但是它仍然应用广泛,因为它速度快,并且可以并行化处理。