程序技术好文:聚类算法一(Kmeans、层次类聚、谱类聚)

简介: 程序技术好文:聚类算法一(Kmeans、层次类聚、谱类聚)

一、 K-means


  1、基础


1 Clustering 中的经典算法,数据挖掘十大经典算法之一


2 算法接受参数 k ;然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:


  //代码效果参考:http://www.jhylw.com.cn/475822929.html

    同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。

3 算法思想:


以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果


4 算法描述:


(1)适当选择c个类的初始中心;


(2)在第k次迭代中,对任意一个样本,求其到c各中心的距离,将该样本归到距离最短的中心所在的类;


(3)利用均值等方法更新该类的中心值;


(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束;否则,则继续迭代。


  2、算法流程:


输入:k, data【n】;


(1) 选择k个初始中心点,例如c【0】=data【0】,…c【k-1】=data【k-1】;


(2) 对于data【0】….data【n】, 分别与c【0】…c【k-1】比较,假定与c【i】差值最少,就标记为i;


(3) 对于所有标记为i点,重新计算c【i】={ 所有标记为i的data【j】之和}/标记为i的个数;


(4) 重复(2)(3),直到所有c【i】值的变化小于给定阈值。


  3、优缺点


  优点:速度快,简单

//代码效果参考: http://www.jhylw.com.cn/495931243.html


  缺点:最终结果跟初始点选择相关,容易陷入局部最优,需直到k值


二、层次类聚


   上篇k-means算法却是一种方便好用的聚类算法,但是始终有K值选择和初始聚类中心点选择的问题,而这些问题也会影响聚类的效果。为了避免这些问题,我们可以选择另外一种比较实用的聚类算法-层次聚类算法。顾名思义,层次聚类就是一层一层的进行聚类,可以由上向下把大的类别(cluster)分割,叫作分裂法;也可以由下向上对小的类别进行聚合,叫作凝聚法;但是一般用的比较多的是由下向上的凝聚方法。


  1、分裂法:


  分裂法指的是初始时将所有的样本归为一个类簇,然后依据某种准则进行逐渐的分裂,直到达到某种条件或者达到设定的分类数目。用算法描述:


  输入:样本集合D,聚类数目或者某个条件(一般是样本距离的阈值,这样就可不设置聚类数目)


   输出:聚类结果


   1.将样本集中的所有的样本归为一个类簇;


  repeat:


2.在同一个类簇(计为c)中计算两两样本之间的距离,找出距离最远的两个样本a,b;


3.将样本a,b分配到不同的类簇c1和c2中;


4.计算原类簇(c)中剩余的其他样本点和a,b的距离,若是dis(a)

   util: 达到聚类的数目或者达到设定的条件


  2、凝聚法:


凝聚法指的是初始时将每个样本点当做一个类簇,所以原始类簇的大小等于样本点的个数,然后依据某种准则合并这些初始的类簇,直到达到某种条件或者达到设定的分类数目。用算法描述:


输入:样本集合D,聚类数目或者某个条件(一般是样本距离的阈值,这样就可不设置聚类数目)


输出:聚类结果


1.将样本集中的所有的样本点都当做一个独立的类簇;


repeat:


2.计算两两类簇之间的距离(后边会做介绍),找到距离最小的两个类簇c1和c2;


3.合并类簇c1和c2为一个类簇;


util: 达到聚类的数目或者达到设定的条件


三、普类聚


  谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的目的。其中的最优是指最优目标函数不同,可以是割边最小分割——如图1的Smallest cut(如后文的Min cut), 也可以是分割规模差不多且割边最小的分割——如图1的Best cut(如后文的Normalized cut)。


图1 谱聚类无向图划分——Smallest cut和Best cut。


这样,谱聚类能够识别任意形状的样本空间且收敛于全局最优解,其基本思想是利用样本数据的相似矩阵(拉普拉斯矩阵)进行特征分解后得到的特征向量进行聚类。


  1 理论基础


  对于如下空间向量item-user matrix:


  如果要将item做聚类,常常想到k-means聚类方法,复杂度为o(tknm),t为迭代次数,k为类的个数、n为item个数、m为空间向量特征数:


1 如果M足够大呢?


2 K的选取?


3 类的假设是凸球形的?


4 如果item是不同的实体呢?


5 Kmeans无可避免的局部最优收敛?


……


  这些都使常见的聚类问题变得相当复杂。


  1.1 图的表示


  如果我们计算出item与item之间的相似度,便可以得到一个只有item的相似矩阵,进一步,将item看成了Graph(G)中Vertex(V),item之间的相似度看成G中的Edge(E),这样便得到我们常见的图的概念。


  对于图的表示(如图2),常用的有:


  邻接矩阵:E,eij表示vi和vi的边的权值,E为对称矩阵,对角线上元素为0,如图2-2。


  Laplacian矩阵:L = D – E, 其中di (行或列元素的和),如图2-3。


图2 图的表示


1.2 特征值与L矩阵


  先考虑一种最优化图像分割方法,以二分为例,将图cut为S和T两部分,等价于如下损失函数cut(S, T),如公式1所示,即最小(砍掉的边的加权和)。


  假设二分成两类,S和T,用q(如公式2所示)表示分类情况,且q满足公式3的关系,用于类标识。


  那么:


  其中D为对角矩阵,行或列元素的和,L为拉普拉斯矩阵。


  由:


  有:


    1、 L为对称半正定矩阵,保证所有特征值都大于等于0;


    2、 L矩阵有唯一的0特征值,其对应的特征向量为1。


  离散求解q很困难,如果将问题松弛化为连续实数值,由瑞利熵的性质知其二将你型的最小值就是L的特征值们(最小值,第二小值,......,最大值分别对应矩阵L的最小特征值,第二小特征值,......,最大特征值,且极值q相应的特征向量处取得,请参见瑞利熵(Rayleigh quotient))。


  写到此,不得不对数学家们致敬,将cut(S,T),巧妙地转换成拉普拉斯矩阵特征值(向量)的问题,将离散的聚类问题,松弛为连续的特征向量,最小的系列特征向量对应着图最优的系列划分方法。剩下的仅是将松弛化的问题再离散化,即将特征向量再划分开,便可以得到相应的类别,如将图3中的最小特征向量,按正负划分,便得类{A,B,C}和类{D,E,F,G}。在K分类时,常将前K个特征向量,采用kmeans分类。


PS:


  1、此处虽再次提到kmeans,但意义已经远非引入概念时的讨论的kmeans了,此处的kmeans,更多的是与ensemble learning相关,在此不述;


  2、k与聚类个数并非要求相同,可从第4节的相关物理意义中意会;


  3、在前k个特征向量中,第一列值完全相同(迭代算法计算特征向量时,值极其相近),kmeans时可以删除,同时也可以通过这一列来简易判断求解特征值(向量)方法是否正确,常常问题在于邻接矩阵不对称。


图3 图的L矩阵的特征值与特征向量


2 最优化方法


  在kmeans等其它聚类方法中,很难刻划类的大小关系,局部最优解也是无法回避的漏病。当然这与kmeans的广泛使用相斥——原理简单。


  2.1 Min cut方法


  如2.2节的计算方法,最优目标函数如下的图cut方法:


  计算方法,可直接由计算L的最小特征值(特征向量),求解。


2.2 Nomarlized cut方法


  Normarlized cut,目标是同时考虑最小化cut边和划分平衡,以免像图1中的cut出一个单独的H。衡量子图大小的标准是:子图各个端点的Degree之和。


2.3 Ratio Cut 方法


  Ratio cut的目标是同时考虑最小化cut边和划分平衡,以免像图1中的cut出一个单独的H。


  最优目标函数为:


2.4 Normalized相似变换


  归一化的L矩阵有:


  因而L’的最小特征值与D-(1/2)E D-(1/2)的最大特征值对应。


  而计算的L’相比计算L要稍具优势,在具体实用中,常以L’替代L,但是min cut和ratio cut不可以。


  PS:这也是常常在人们的博客中,A说谱聚类为求最大K特征值(向量),B说谱聚类为求最小K个特征值(向量的原因)。


3 谱聚类步骤


  第一步:数据准备,生成图的邻接矩阵;


  第二步:归一化普拉斯矩阵;


  第三步:生成最小的k个特征值和对应的特征向量;


  第四步:将特征向量kmeans聚类(少量的特征向量);


4 谱聚类的物理意义


  谱聚类中的矩阵:


  可见不管是L、L’都与E联系特别大。如果将E看成一个高维向量空间,也能在一定程度上反映item之间的关系。将E直接kmeans聚类,得到的结果也能反映V的聚类特性,而谱聚类的引入L和L’是使得G的分割具有物理意义。


  而且,如果E的item(即n)足够大,将难计算出它的kmeans,我们完全可以用PCA降维(仍为top的特征值与向量)。


  上述对将E当成向量空间矩阵,直观地看符合我们的认知,但缺乏理论基础;而L(L’等)的引入,如第2节所述,使得计算具有理论基础,其前k个特征向量,也等价于对L(L’等)的降维。


  因而聚类就是为图的划分找了理论基础,能达到降维的目的。


推荐相关相关文档:Wen-Yen Chen, Yangqiu Song, Hongjie Bai, Chih-Jen Lin, Edward Y. Chang. Parallel Spectral Clustering in Distributed Systems.

相关文章
|
2天前
|
存储 算法 Java
技术笔记:JVM的垃圾回收机制总结(垃圾收集、回收算法、垃圾回收器)
技术笔记:JVM的垃圾回收机制总结(垃圾收集、回收算法、垃圾回收器)
|
3天前
|
机器学习/深度学习 分布式计算 算法
在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)
【6月更文挑战第28天】在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)、数据规模与特性(大数据可能适合分布式算法或深度学习)、性能需求(准确性、速度、可解释性)、资源限制(计算与内存)、领域知识应用以及实验验证(交叉验证、模型比较)。迭代过程包括数据探索、模型构建、评估和优化,结合业务需求进行决策。
7 0
|
3天前
|
传感器 算法
技术心得记录:四元数及姿态解算Mahony算法
技术心得记录:四元数及姿态解算Mahony算法
|
3天前
|
机器学习/深度学习 算法 数据可视化
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
|
3天前
|
存储 算法 Python
技术心得记录:大整数算法【10】Comba乘法(实现)
技术心得记录:大整数算法【10】Comba乘法(实现)
|
3天前
|
Java BI C#
技术笔记:SM4加密算法实现Java和C#相互加密解密
技术笔记:SM4加密算法实现Java和C#相互加密解密
|
1天前
|
算法 安全 数据库
基于结点电压法的配电网状态估计算法matlab仿真
**摘要** 该程序实现了基于结点电压法的配电网状态估计算法,旨在提升数据的准确性和可靠性。在MATLAB2022a中运行,显示了状态估计过程中的电压和相位估计值,以及误差随迭代变化的图表。算法通过迭代计算雅可比矩阵,结合基尔霍夫定律解决线性方程组,估算网络节点电压。状态估计过程中应用了高斯-牛顿或莱文贝格-马夸尔特法,处理量测数据并考虑约束条件,以提高估计精度。程序结果以图形形式展示电压幅值和角度估计的比较,以及估计误差的演变,体现了算法在处理配电网状态估计问题的有效性。
|
5天前
|
机器学习/深度学习 自然语言处理 算法
m基于深度学习的OFDM+QPSK链路信道估计和均衡算法误码率matlab仿真,对比LS,MMSE及LMMSE传统算法
**摘要:** 升级版MATLAB仿真对比了深度学习与LS、MMSE、LMMSE的OFDM信道估计算法,新增自动样本生成、复杂度分析及抗频偏性能评估。深度学习在无线通信中,尤其在OFDM的信道估计问题上展现潜力,解决了传统方法的局限。程序涉及信道估计器设计,深度学习模型通过学习导频信息估计信道响应,适应频域变化。核心代码展示了信号处理流程,包括编码、调制、信道模拟、降噪、信道估计和解调。
27 8
|
7天前
|
算法
基于GA遗传优化的混合发电系统优化配置算法matlab仿真
**摘要:** 该研究利用遗传算法(GA)对混合发电系统进行优化配置,旨在最小化风能、太阳能及电池储能的成本并提升系统性能。MATLAB 2022a用于实现这一算法。仿真结果展示了一系列图表,包括总成本随代数变化、最佳适应度随代数变化,以及不同数据的分布情况,如负荷、风速、太阳辐射、弃电、缺电和电池状态等。此外,代码示例展示了如何运用GA求解,并绘制了发电单元的功率输出和年变化。该系统原理基于GA的自然选择和遗传原理,通过染色体编码、初始种群生成、适应度函数、选择、交叉和变异操作来寻找最优容量配置,以平衡成本、效率和可靠性。
|
8天前
|
机器学习/深度学习 算法
基于鲸鱼优化的knn分类特征选择算法matlab仿真
**基于WOA的KNN特征选择算法摘要** 该研究提出了一种融合鲸鱼优化算法(WOA)与K近邻(KNN)分类器的特征选择方法,旨在提升KNN的分类精度。在MATLAB2022a中实现,WOA负责优化特征子集,通过模拟鲸鱼捕食行为的螺旋式和包围策略搜索最佳特征。KNN则用于评估特征子集的性能。算法流程包括WOA参数初始化、特征二进制编码、适应度函数定义(以分类准确率为基准)、WOA迭代搜索及最优解输出。该方法有效地结合了启发式搜索与机器学习,优化特征选择,提高分类性能。