层次聚类(Hierarcical Clustering)
层次聚类是聚类算法中的一种,它通过计算不同类别数据点之间的相似度,来创建一颗有层次的嵌套聚类树,层次聚类的策略有两种:
1.Agglomerative: 把每个点看成一个簇,合并这些相似的簇形成聚类;
2.Divisive: 把所有的点看成一个簇,分解这些点到各自簇内形成聚类;
Merge和Split使用的是贪婪的方式来进行计算的,所以非常耗时( )以及消耗内存( ),因此有一些高效的方法:SLink,CLink,ALink
衡量点之间的相似度是一项重要的工作,计算两个簇之间相似度的方法:
1.SLink-Single Linkage: 将两个组合数据点中距离最近的两个点之间的距离作为这两个组合数据点的距离,但是这种方式容易受到极端值的影响。
2.CLink-Complete Linkage: 将两个组合数据点中距离最远的两个点之间的距离作为这两个组合数据点的距离,这种方式同样容易受到极端值得影响。
3.ALink-Average Linkage: 计算两个组合数据点中的每个数据点与其他数据点的距离,将所有距离的均值作为两个组合数据点的距离。
聚类模型评估(Calinski-Harabaz Index)
因为聚类模型是一种无监督的学习模型,因此我们没有对应的标签来判断我们是否聚类正确,那怎么来判定我们模型的好坏呢?这似乎是一个比较困难的事情。
对于聚类模型来说,我们希望聚类结果为相同类别之间的数据距离越近越好,而不同类别之间的数据距离越远越好;因此,对于K个聚类,Calinski-Harabaz的分数S被定义为组间离散与组内离散的比率,该分值越大说明聚类效果越好。
是组间离散矩阵
是组内离散矩阵
n是样本点数, 是在聚类q中的样本点, 是聚类q的中心点, 是聚类q中的样本点数量,c是E的重点。
当然,还有其他很多的聚类模型评估方法,如:轮廓系数、兰德指数、互信息等等,需要我们去学习。
ps:兰德指数是根据实际分类与聚类结果比较得出的分数,但是个人以为,聚类模型本身就是无监督学习模型,如果已经知道实际类别,那也就变成了有监督学习的分类模型,个人不是太理解为什么会有实际类别结果。