学习笔记【机器学习重点与实战】——9 聚类算法原理

1 K-Means

K-Means算法,也被称为K-均值算法或K-平均,是一种广泛使用的聚类算法,或者为其它聚类算法的基础。

K-Means是发现给定数据集的 k 个簇的算法。簇个数 k 是用户给定的,每一个簇通过其质心(centroid), 即簇中所有点的中心来描述。

K-Means算法过程伪代码表示如下:

创建k个点作为起始质心(经常是随机选择)
当任意一个点的簇分配结果发生改变时
    对数据集中的每个数据点
        对每个质心
            计算质心与数据点之间的距离
        将数据点分配到距其最近的簇
    对每一个簇,计算簇中所有点的均值并将均值作为质心

算法停止条件通常可设置为:最大运行轮数,最小调整幅度阈值。

其计算过程可表达如下图:

这里写图片描述

起始质心是随机选取的,使得K-均值对初值敏感。

优点:

  1. 是解决聚类问题的一种经典算法,简单、快速
  2. 对处理大数据集,算法保持可伸缩性和高效率
  3. 当簇近似为高斯分布肘,它的效果较好

缺点:

  1. 在簇的平均值可彼定义的情况下才能使用,可能不适用于某些应用
  2. 必须事先给出k(要生成的簇的目),而且对初值敏感,对于不同的初值,可能会导致不同结果
  3. 不适合于发现非凸形状的者大小差别很夫的簇
  4. 对躁声和孤立点数据敫感

sklearn中代码实现如下:

from sklearn.cluster import KMeans
model = KMeans(n_clusters=4, init='random')

1.1 K-means++

K-means算法最开始随机选取数据集中K个点作为聚类中心,使得K-均值对初值敏感。而K-means++按照如下的思想选取K个聚类中心:假设已经选取了n个初始聚类中心(0

from sklearn.cluster import KMeans
model = KMeans(n_clusters=4, init='k-means++')

1.2 二分K-Means

为克服K-Means算法收敛于局部最小值的问题,有人提出了另一个称为二分K - 均 值(bisecting K-means)的算法。该算法首先将所有点作为一个簇,然后将该簇一分为二。 之后选择其中一个簇继续进行划分,选择哪一个簇进行划分取决于对其划分时候可以最大程度降低 SSE(平方和误差)的值。 上述基于 SSE 的划分过程不断重复,直到得到用户指定的簇数目为止。

二分K-Means算法过程伪代码表示如下:

将所有点看成一个簇
当簇数目小于 k 时
对于每一个簇
    计算总误差
    在给定的簇上面进行 KMeans 聚类(k=2)
    计算将该簇一分为二之后的总误差
选择使得误差最小的那个簇进行划分操作

另一种做法是选择 SSE 最大的簇进行划分,直到簇数目达到用户指定的数目为止。

2 层次聚类

层次聚类(hierarchical clustering)试图在不同层次对数据集进行划分,从而形成树形的聚类结构。数据集的划分可采用”自底向上”的聚合策略,也可采用 “自顶向下” 的分拆策略。

2.1 “自底向上”的聚合策略

AGNES(AGglomerativeNESting)算法即为”自底向上”的聚合策略。

最初将每个对象作为一个簇,然后这些簇根据某些准则被一步步地合并。两个簇间的距离由这两个不同中距离最
近的数据点对的相似度来确定;聚合的合并过程反复进行直到所有的对象最终满足数目。

聚类簇之间的距离可通过下面三种方式计算:

  1. 最小距离(”单链接”,single-linkage)

    两个集合中最近的两个样本的距离;容易形成链状结构。

dmin(Ci,Cj)=minx⃗ iCi,x⃗ jCjdistance(x⃗ i,x⃗ j) d m i n ( C i , C j ) = min x → i ∈ C i , x → j ∈ C j d i s t a n c e ( x → i , x → j )

  1. 最大距离(”全链接”,complete-linkage)

    两个集合中最远的两个样本的距离(complete);若存在异常值则不稳定。

    dmax(Ci,Cj)=maxx⃗ iCi,x⃗ jCjdistance(x⃗ i,x⃗ j) d m a x ( C i , C j ) = max x → i ∈ C i , x → j ∈ C j d i s t a n c e ( x → i , x → j )

  2. 平均距离(”均链接”,average-linkage)

    A. 两个集合中样本间两两距离的平均值(average)

    davg(Ci,Cj)=1|Ci||Cj|x⃗ iCix⃗ jCjdistance(x⃗ i,x⃗ j) d a v g ( C i , C j ) = 1 | C i | | C j | ∑ x → i ∈ C i ∑ x → j ∈ C j d i s t a n c e ( x → i , x → j )

    B. 两个集合中样本间两两距离的平方和(ward)
    dward(Ci,Cj)=x⃗ iCix⃗ jCjdistance(x⃗ i,x⃗ j)2 d w a r d ( C i , C j ) = ∑ x → i ∈ C i ∑ x → j ∈ C j d i s t a n c e ( x → i , x → j ) 2

sklearn中代码实现如下:

from sklearn.cluster import AgglomerativeClustering
AgglomerativeClustering(n_clusters=4, affinity='euclidean', linkage='ward')

affinity:距离计算方式,可取”euclidean”, “l1”, “l2”,”manhattan”, “cosine”, 或者 ‘precomputed’。

linkage:聚类簇之间的距离计算方式,可取”ward”, “complete”, “average”。

2.2 “自顶向下” 的分拆策略

DIANA(DlvisiveANAlysis)算法即为”自顶向下” 的分拆策略。

是”自底向上”的聚合策略过程的反过程,属于分裂的层次聚类,首先将所有的对象初始化到一个簇中,然后根据一些原则(比如最大的欧式距离),将簇分类。直到到达用户指定的数目或者两个簇之间的距离超过了某个阈值。

3 密度聚类

密度聚类亦称”基于密度的聚类” (density-based clustering) ,此类算法假设聚类结构能通过样本分布的紧密程度确定。通常情形下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。

密度聚类算法能克服基于距离的算法只能发现“类圆形”(凸)的聚类的缺点,可发现任意形状的聚类,且对噪声数据不敏感。但计算密度单元的计算复杂度大,需要建立空间索引来降低计算量。

DBSCAN(Density-Based Spatial Clustering Of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在有“噪声”的数据中发现任意形状的聚类。自适应划分簇,不需要给定簇的大小。

基于一组”邻域” (neighborhood) 参数 (ε,MinPts) 来刻画样本分布的紧密程度。

相关概念包括:ε-邻域,核心对象 (core object),密度直达 (directly density-reachable) ,密度可达(density-reachable) ,密度相连(density-connected) 。直观显示如下图:

这里写图片描述

图中 (MinPts = 3):虚线显示出 ε-邻域, x1 x 1 是核心对象, x2 x 2 x1 x 1 密度直达, x3 x 3 x1 x 1 密度可达, x3 x 3 x4 x 4 密度相连。

DBSCAN算法流程如下:

  • 如果一个点p的 ε-邻域包含多于m个对象,则创建一个p作为核心对象的新簇;
  • 寻找并合并核心对象直接密度可达的对象;
  • 没有新点可以更新簇时,算法结束。

由上述算法可知:

  • 每个簇至少包含一个核心对象;
  • 非核心对象可以是簇的一部分,构成了簇的边缘(edge);
  • 包含过少对象的簇彼认为是噪声。

sklearn中代码实现如下:

from sklearn.cluster import DBSCAN
DBSCAN(eps=eps, min_samples=min_samples) # 参数分别为 ε ,MinPts

4 谱聚类

谱聚类是一种基于图的聚类方法,通过对样本数据的拉普拉斯矩阵特征向量进行聚类,从而达到对样本数据聚类的目的。

方阵作为线性算子,它的所有特征值的全体统称方阵的谱。方阵的谱半径为最大的特征值,矩阵A的谱半径为( ATA A T A )的最大特征值。

谱聚类的流程如下:

  • 给定一组据 x1,x2,...xn x 1 , x 2 , . . . x n ,记任意两个点之间的相似度(“距离”的减函数)为 Sij=<xi,xj> S i j =< x i , x j > ,形成相似度图(similarity graph):G=(V,E)。如果 xi x i xj x j 之间的相似度 Sij S i j 大于一定的阈值,那么,两个点是连接的,权值记做 Sij S i j
  • 接下来,可以用相似度图来解决样本数据的聚类问题:找到图的一个划分,形成若干个组(Group),使得不同组之间有较低的权值,组内有较高的权值。

谱聚类算法的拉普拉斯矩阵包括:

  1. 未正则拉普拉斯矩阵:L = D-W
  2. 随机游走拉普拉斯矩阵: Lrw=D1(DW) L r w = D − 1 ( D − W )
  3. 对称拉普拉斯矩阵: Lsym=D12(DW)D12 L s y m = D − 1 2 ( D − W ) D − 1 2

sklearn中代码实现如下:

from sklearn.cluster import SpectralClustering
SpectralClustering(n_clusters=4, affinity='precomputed') 

5 标签传递算法

对于部分样本的标记给定,而大多样本的标记未知的情形,是半监督学习问题。

标签传递算法(LabelPropagation Algorithm,LPA),将标记样本的标记通过一定的概率传递给未标记样本,直到最终收敛。

标签传递过程如下图所示,左上角图为初始状态,有颜色的代表有标记的样本值,灰色代表没有标记的样本值。数字分别代表各自的迭代次数。

这里写图片描述

6 参考

  1. 机器学习升级版视频 - 邹博
  2. 《机器学习 - 周志华》第9章 聚类
  3. 《机器学习实战》第10章 利用K-均值聚类算法对未标注数据分组

===========文档信息============
学习笔记由博主整理编辑,供非商用学习交流用
如本文涉及侵权,请随时留言博主,必妥善处置
版权声明:非商用自由转载-保持署名-注明出处
署名(BY) :dkjkls(dkj卡洛斯)
文章出处:http://blog.csdn.net/dkjkls

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值