1 K-Means
K-Means算法,也被称为K-均值算法或K-平均,是一种广泛使用的聚类算法,或者为其它聚类算法的基础。
K-Means是发现给定数据集的 k 个簇的算法。簇个数 k 是用户给定的,每一个簇通过其质心(centroid), 即簇中所有点的中心来描述。
K-Means算法过程伪代码表示如下:
创建k个点作为起始质心(经常是随机选择)
当任意一个点的簇分配结果发生改变时
对数据集中的每个数据点
对每个质心
计算质心与数据点之间的距离
将数据点分配到距其最近的簇
对每一个簇,计算簇中所有点的均值并将均值作为质心
算法停止条件通常可设置为:最大运行轮数,最小调整幅度阈值。
其计算过程可表达如下图:
起始质心是随机选取的,使得K-均值对初值敏感。
优点:
- 是解决聚类问题的一种经典算法,简单、快速
- 对处理大数据集,算法保持可伸缩性和高效率
- 当簇近似为高斯分布肘,它的效果较好
缺点:
- 在簇的平均值可彼定义的情况下才能使用,可能不适用于某些应用
- 必须事先给出k(要生成的簇的目),而且对初值敏感,对于不同的初值,可能会导致不同结果
- 不适合于发现非凸形状的者大小差别很夫的簇
- 对躁声和孤立点数据敫感
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)算法即为”自底向上”的聚合策略。
最初将每个对象作为一个簇,然后这些簇根据某些准则被一步步地合并。两个簇间的距离由这两个不同中距离最
近的数据点对的相似度来确定;聚合的合并过程反复进行直到所有的对象最终满足数目。
聚类簇之间的距离可通过下面三种方式计算:
最小距离(”单链接”,single-linkage)
两个集合中最近的两个样本的距离;容易形成链状结构。
最大距离(”全链接”,complete-linkage)
两个集合中最远的两个样本的距离(complete);若存在异常值则不稳定。
dmax(Ci,Cj)=maxx⃗ i∈Ci,x⃗ j∈Cjdistance(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 )平均距离(”均链接”,average-linkage)
A. 两个集合中样本间两两距离的平均值(average)
davg(Ci,Cj)=1|Ci||Cj|∑x⃗ i∈Ci∑x⃗ j∈Cjdistance(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⃗ i∈Ci∑x⃗ j∈Cjdistance(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),使得不同组之间有较低的权值,组内有较高的权值。
谱聚类算法的拉普拉斯矩阵包括:
- 未正则拉普拉斯矩阵:L = D-W
- 随机游走拉普拉斯矩阵: Lrw=D−1(D−W) L r w = D − 1 ( D − W )
- 对称拉普拉斯矩阵: Lsym=D−12(D−W)D−12 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 参考
- 机器学习升级版视频 - 邹博
- 《机器学习 - 周志华》第9章 聚类
- 《机器学习实战》第10章 利用K-均值聚类算法对未标注数据分组
===========文档信息============
学习笔记由博主整理编辑,供非商用学习交流用
如本文涉及侵权,请随时留言博主,必妥善处置
版权声明:非商用自由转载-保持署名-注明出处
署名(BY) :dkjkls(dkj卡洛斯)
文章出处:http://blog.csdn.net/dkjkls