机器学习(四)聚类算法
4.1 K-means
基于原型的聚类 假设类的结构可以用一组原型来刻画 划分方法
目标函数:
E=∑i=1k∑x∈ci||x−μi||2(4.1.1) (4.1.1) E = ∑ i = 1 k ∑ x ∈ c i | | x − μ i | | 2
贪心策略:
随机选择k初始均值向量
计算样本到均值中心的距离,将其放入最近的簇
更新均值向量
如果矩阵向量均未更新则算法结束
k如何选取:
肘部法:
sse下降的拐点随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。
当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,
故SSE的下降幅度会很大,
当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。
轮廓系数法:
b−amax(a,b)(4.1.2) (4.1.2) b − a m a x ( a , b )
a为点
xi x i 与同簇其他样本的平均距离,称为凝聚度,b为点
xi x i 与最近簇其他样本的平均距离,称为分离度
簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好
基于一致性矩阵的算法:
即认为在正确的K时,不同次聚类的结果会更加相似,以此确定K
初值点的选取:
1.选择批次距离尽可能远的K个点。首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的距离最大的点作为第三个初始类簇的中心点,以此类推,直至选出K个初始类簇中心点。
2.随机选取一个样本作为第一个聚类中心 c1;计算每个样本与当前已有类聚中心最短距离(即与最近一个聚类中心的距离),用 D(x)表示;这个值越大,表示被选取作为聚类中心的概率较大;最后,用轮盘法选出下一个聚类中心;重复选出 k 个聚类中心。
3.初步将数据分成K个区域,将每个区域中心作为初始聚类中心
4.选用层次聚类或者Canopy算法进行初始聚类,然后利用这些类簇的中心点作为KMeans算法初始类簇中心点。
特点:
聚类时间快
在处理大数据库时相对有效
用户必须事先指定聚类簇的个数
常常终止于局部最优
只适用于数值属性聚类(计算均值有意义)
对噪声和异常数据也很敏感
不同的初始值,结果可能不同
不适合发现非凸面形状的簇
4.2 DBSCAN
基于密度的聚类算法假设聚类结构能够通过样本分布的紧密程度确定
基本概念:
邻域:对于 xj x j ,ϵ邻域包括样本集中与 xj x j 的距离不大于ϵ的样本
核心对象:若 xj x j 的ϵ邻域内至少包含MinPts样本,那它就叫一个核心对象
密度直达:若 xj x j 位于 xi x i 的ϵ领域内,且 xi x i 是核心对象,则 xj x j 由 xi x i 密度直达
密度可达:若如果存在一个对象链 p1,p2,...pn,p1=q,pn=p p 1 , p 2 , . . . p n , p 1 = q , p n = p ,对于 pi∈D(1≤i≤n),pi+1 p i ∈ D ( 1 ≤ i ≤ n ) , p i + 1 是从 pi p i 关于ε和
Minpts直接密度直达的,则对象p从对象q关于ε和Minpts密度可达的
密度相连:若对于 xi x i 与 xj x j ,存在 xk x k 使得 xi x i , xj x j 均由 xk x k 密度可达 则称 xi x i , xj x j 密度相连
簇是满足下面条件的非空样本子集:
连接性: xiϵC,xjϵC x i ϵ C , x j ϵ C => xi x i 与 xj x j 密度相连
最大性: xiϵC,xj x i ϵ C , x j 由 xi x i 密度可达=》 xjϵC x j ϵ C
算法:
选任意节点p,对于参数ε(Eps)和MinPts,检索所有关于p密度可达的顶点
如果p是核心对象, 一个簇形成
如果p是边界点, 没有有关于p密度可达的顶点,扫描下一个节点
继续算法直到所有节点扫描一遍
主要优点有:
可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集
可以在聚类的同时发现异常点,对数据集中的异常点不敏感
聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。
主要缺点有:
如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合
如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进
调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。
4.3 层次聚类
4.3.1 AGNES
算法流程:
自底向上
将每个样本看为一个簇
选择两个最近的簇进行合并
距离:
最小距离 单链接 当前簇距离小于某阈值 算法就会终止 dmin(Ci,Cj)=minx∈Ciz∈Cjdist(x,z) d m i n ( C i , C j ) = min x ∈ C i z ∈ C j d i s t ( x , z )
最大距离 全连接 如果最近簇大于某个阈值 算法会终止 dmax(Ci,Cj)=maxx∈Ciz∈Cjdist(x,z) d m a x ( C i , C j ) = max x ∈ C i z ∈ C j d i s t ( x , z )
平均距离 均连接 克服利群点敏感问题 dmin(Ci,Cj)=1|Ci||Cj|∑x∈Ci∑z∈Cjdist(x,z) d m i n ( C i , C j ) = 1 | C i | | C j | ∑ x ∈ C i ∑ z ∈ C j d i s t ( x , z )
4.3.2 DIANA
思想:
分裂的层次聚类,首先将所有的对象初始化到一个簇中,然后根据一些原则(比如最邻近的最大欧式距离),将该簇分类。直到到达用户指定的簇数目或者两个簇之间的距离超过了某个阈值。
DIANA用到如下两个定义簇的直径,平均相异度(平均距离):
缺点:
传统的层次聚类算法的效率比较低 O(tn2 ) t: 迭代次数 n: 样本点数,最明显的一个缺点是不具有再分配能力,即如果样本点 A 在某次迭代过程中已经划分给类簇 C1 ,那么在后面的迭代过程中 A 将永远属于类簇 C1 ,这将影响聚类结果的准确性。