文章目录
- 📚聚类
- 📚KMeans
- 📚层次聚类
- 🐇层次聚类概述
- 🐇dendrogram-树状图
- 🐇linkages-衡量两个类之间的距离
- 🐇Lance-Williams算法
- 🐇K-means VS 层次聚类
- 📚DBSCAN
📚聚类
-
定义:聚类是一种无监督学习,样本没有标签,将一群样本划分到一个类中,使得:最大化类间距,最小化类内
-
距离测量指标:
-
四种聚类:
-
基于质心的聚类,使用中心表示该簇(K-means,K-medoids)
-
基于链接的聚类:层次聚类-在一定阈值处切断树,从而得到几个类
-
基于密度的聚类,DBSCAN,OPTICS,将高密度的区域连接起来
-
基于分布的聚类,Mixture models
-
📚KMeans
-
K-means的思想:最小化数据到中心点的方差S,算法的目标是最小化数据点与所属簇中心之间的平方距离之和。
-
K-means 算法步骤:
- 初始化:选择 k 个初始聚类中心(可以是随机选择或根据特定的策略选择),每个数据点被分配到离其最近的聚类中心所对应的簇。
- 迭代更新:重复以下步骤直到达到停止条件(例如,聚类中心不再发生变化):
- 计算每个簇的新聚类中心:将每个簇内的所有数据点的坐标取平均值,得到新的聚类中心。
- 将每个数据点重新分配到离其最近的新聚类中心所对应的簇。
- 输出结果:当算法终止时,得到 k 个簇,每个簇包含一组数据点,以及每个簇的聚类中心。
-
但是如果是一个NP-hard问题,可以使用启发式搜索:
-
先随机选K个中心点,然后将剩下的数据点按照距离划到相应的类中,同时更新每类的中心点,然后继续划分,划分后更新中心点,不断重复直至收敛。
-
保证在有限的迭代次数内收敛(有限收敛)
-
将数据点划分到距离最近的簇中心点所需时间为O(KN)
-
重新计算簇中心点的时间为O(N)
-
-
K-means的问题:
-
初始化的方式有可能导致划分结果完全不同,所以我们要对之进行避免
- 解决方法:
- 可以多次运行,然后选择error最小的聚类方式
- 不使用随机的方式选择初始点,比如选择最远的点作为聚类中心(kmeans++)
- 解决方法:
-
首先随机选择第一个类的中心点,然后计算剩余点的距离,在选取第n+1个聚类中心时:距离当前n个聚类中心越远的点会有更高的概率被选为第n+1个聚类中心。
-
-
K-means的限制:
-
簇是不同大小的话,不能很好的划分
-
簇有密度之分的话,也不能很好的划分
-
簇是非球形的话,划分结果也不好
-
解决方法:先划分出小的簇,然后合并成大簇。使用层次聚类或者基于密度的聚类可以克服以上三个问题。
-
-
Kmeans评价
-
优点:
- 简单,适用于规则不相交的簇
- 收敛相对较快
- 高效性,且时间复杂度为O(tkn)t是迭代次数,k是簇的个数,n是数据点的个数
-
缺点:
- 需要事先确定k的值
- 可能只收敛到局部最优解,需要尝试多种不同的初始中心
- 可能对噪声点和离群点敏感
- 有些集群的形状并不适用
-
📚层次聚类
🐇层次聚类概述
-
层次聚类定义:一种无监督学习方法,用于将数据点划分为多个不同的聚类簇。该算法通过计算数据点之间的相似性或距离来构建层次结构,并根据相似性度量逐步合并或划分聚类簇。
-
层次聚类思想:描述AB的相似度,A和B的相似性用最低共享内部节点的高度,相较于kmeans提供的是随机的结果,层次聚类提供的是确定性的结果,分为凝聚型层次聚类和分裂型层次聚类,主要关注自下而上或凝聚层次聚类。
-
层次聚类算法:开始每个点都是一类。然后确定距离最近的两个类,将之合并。重复直到只剩下一个类。
-
层次聚类优点:
- 不需要预先指定聚类数目,可以根据数据的内在结构自动进行聚类。
- 能够捕捉到不同粒度的聚类结果,提供了更丰富的信息。
-
层次聚类不足:
- 对于大规模数据集,计算复杂度较高。
- 对噪声和离群点较为敏感。
- 在处理非球形聚类簇或非线性可分数据时,效果可能不理想。
🐇dendrogram-树状图
-
定义:树状图(dendrogram)是一种用于可视化层次聚类结果的图形表示方法。它将数据点和聚类簇按照层次结构展示,并显示它们之间的相似性或距离关系。
-
结构:在树状图中,每个数据点都表示为一个叶节点(leaf node),而每个聚类簇则表示为一个内部节点(internal node)。叶节点和内部节点之间通过边(branches)连接起来,形成一个树状结构。树状图的根节点(root node)表示整个数据集或最终的全局聚类簇。
-
特点:树状图通常以垂直方向绘制,其中纵轴表示聚类簇之间的距离或相似性度量。根据树状图上的切割点,可以选择不同层次的聚类簇。根据需要,可以通过调整切割点来获取不同粒度的聚类结果。
-
应用:树状图可以帮助我们直观地理解数据点之间的相似性和聚类结构。通过观察树状图,我们可以确定合适的聚类簇数目,或者选择合适的切割点来获取特定粒度的聚类结果。它在生物学、社会科学、计算机视觉等领域中被广泛使用。
🐇linkages-衡量两个类之间的距离
-
两类距离:
single linkage cut interpretation
:对任意点xi,簇内存在一点xj,d(xi,xj)<=0.9complete linkage cut interpretation
:对任意点xi,其簇内的所有点都满足d(xi,xj)<=5
-
各种问题:
single linkage
可能会划分出链条型的簇,簇不能太紧凑或者太分散complete linkage
可以避免链条型的簇,但是会受到过于紧凑簇的影响。因为它的分数是基于簇的最坏情况所以一个点可以更接近其他簇中的点,而不是它自己簇中的点。簇很紧凑,但距离不够远。average linkage
:不同于上述两个linkage,当我们切树状图的时候average linkage并不能给我们一个很好的解释。另外如果对结果简单应用一个单调递减变化,会影响最后的结果,从而我们不确定要使用哪种距离函数,而上述两个linkage没有这个问题
🐇Lance-Williams算法
- Lance-Williams算法是一种用于层次聚类中的距离更新方法。它基于凝聚型层次聚类,在每次迭代中通过计算更新聚类簇之间的相似性或距离来合并最近的聚类簇。
-
Lance-Williams算法中聚类簇之间的连接方式:
-
单链接(Single Linkage):使用两个聚类簇中最近的两个数据点之间的距离作为聚类簇之间的距离。这种连接方式通常会导致产生长而细的聚类簇。
-
完全链接(Complete Linkage):使用两个聚类簇中最远的两个数据点之间的距离作为聚类簇之间的距离。这种连接方式通常会产生更紧凑且密集的聚类簇。
-
平均链接(Average Linkage):使用两个聚类簇中所有数据点对之间的平均距离作为聚类簇之间的距离。这种连接方式介于单链接和完全链接之间,能够平衡聚类簇的大小和紧密度。
-
-
算法思想:Lance-Williams算法通过递归地更新聚类簇之间的距离矩阵来实现。在每次迭代中,根据选择的连接方式计算新合并的聚类簇与其他聚类簇之间的距离,并将这些距离更新到距离矩阵中。这个过程不断重复,直到满足停止条件或达到预定的聚类数目。
-
特别注意:Lance-Williams算法只是层次聚类中的一种距离更新方法,而不是完整的层次聚类算法。它通常与其他聚类算法(如凝聚型层次聚类或K-means聚类)结合使用,以完成完整的聚类过程。
-
下面的更新公式是所有linkage的统一公式:
- Lance-Williams算法可以检测出离群点。
🐇K-means VS 层次聚类
-
K-means:低内存占用;计算快,时间复杂度 O ( n ) O(n) O(n);但是结果对随机的初始化非常敏感,同时初始簇的个数需要事先确定。
-
层次聚类:是确定性的算法;树状图向我们展示了K的不同选择;仅需要一个距离矩阵,来看簇之间的不同;但是占用大量的内存,所需的计算也比K-means多。
📚DBSCAN
-
基于密度的聚类算法,簇是高密度的区域,噪声点位于低密度的区域。
-
对于簇来说有两类点:
-
core point:其以eps为半径的范围内有至少MinPts个点
-
border point:在eps范围内的点数少于MinPts,但是他是core point的邻居
-
-
簇的概念
-
对于簇C内的每个点p,存在一个C中的点q,p在q的eps-neighborhood内,而且,q是core point
-
点p是点q的直接密度可达,当p在q的eps-neighborhood范围内,且q是core point。是一个非对称的关系,p是q的直接密度可达,但是q不一定是p的直接密度可达
-
p是q的密度可达,当有一系列的点p1,p2,…,ps,p1=q,ps=p,对所有1<i<s-1,pi+1是pi的直接密度可达
-
p到q密度连通,当存在一个点v,是p和q的密度可达点,是一个对称的关系
-
-
簇举例
- C是数据集D的非空子集:
- (1)对所有p,q属于D,若p属于C,q是p的密度可达,那么q也属于C(Maximality)
- (2)对所有p,q属于C,p是q的密度可达(connectivity)
-
定义噪声点:不属于任何一个类的点称为噪声点。
-
基本原理:簇C中的所有点都是密度可达的。
- 首先对所有点找其eps淋雨内的点到个数,判断其是否是core point
- 在邻域图上找core point的连通分量,忽略所有的非core point
- 将非core point划分到其eps邻域的簇,否则认为其是噪声点
-
DBSCAN可以处理不同形状和大小的簇,但是当不同簇的密度不同时,DBSCAN很难有很好的的效果。
-
时间复杂度:计算每个neighborhood的时候需要O(logn)的复杂度,整个算法时间复杂度为O(nlogn)