一、 K-means
  1、基础
   1 Clustering 中的经典算法,数据挖掘十大经典算法之一
     2 算法接受参数 k ;然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:
      同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。
     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、优缺点

   优点:速度快,简单

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

  1、分裂法:

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

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

   输出:聚类结果

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

  repeat:

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

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

4.计算原类簇(c)中剩余的其他样本点和a,b的距离,若是dis(a)<dis(b),则将样本点归到c1中,否则归到c2中;

   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.

转载于:https://www.cnblogs.com/kang06/p/9468647.html

聚类算法一(Kmeans、层次类聚、谱类聚)相关推荐

  1. python 三种聚类算法(K-means,AGNES,DBScan)

    python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan) 更新时间:2019年06月27日 14:44:44   作者:weixin_42134141 这篇文章主要介绍了pyth ...

  2. kmeans鸢尾花分类python代码_python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)

    一.分散性聚类(kmeans) 算法流程: 1.选择聚类的个数k. 2.任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心. 3.对每个点确定其聚类中心点. 4.再计算其聚类新中心. 5.重复以 ...

  3. 机器学习笔记(九)聚类算法Birch和层次聚类Hierarchical clustering

    本篇文章我们继续介绍另一种聚类算法--Birch模型,相对于K-means和DBSCAN,Birch的应用并没有那么广泛,不过它也有一些独特的优势,Birch算法比较适合于数据量大,类别数K也比较多的 ...

  4. k中心点聚类算法伪代码_聚类算法之——K-Means、Canopy、Mini Batch K-Means

    K-Means||算法 K-Means||算法是为了解决K-Means++算法缺点而产生的一种算法: 主要思路是改变每次遍历时候的取样规则,并非按照K-Means++算法每次遍历只获取一个样本,而是每 ...

  5. 聚类算法之K-means实践

    聚类算法总结 一 '层次'方法 层次方法创建给定数据对象集的层次分解.根据层次的分解的形成方式,层次的方法又可以分为凝聚和分裂方法. 凝聚法:自底向上.开始将每个对象形成单独的组,然后层次合并相似的组 ...

  6. K-均值聚类算法(k-means)的C++实现

    K-均值聚类算法(k-means)的C++实现 k-均值聚类算法(k-means)主要用于解决 距离空间 上目标点集的自动分类问题. 本篇博文目的在于 阐述 k-means 聚类算法的数学模型 利用C ...

  7. 使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战

    使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战 目录

  8. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...

    机器学习实战(Machine Learning in Action)学习笔记----06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习 作者:米仓山下 时 ...

  9. 聚类算法:K-means聚类与系统(层次)聚类SPSS操作

    笔记整理来自清风老师的数学建模课程: https://www.bilibili.com/video/BV1gJ411k7X4?from=search&seid=1537010279875630 ...

  10. c均值聚类matlab程序_聚类算法之kmeans算法

    一.k-means算法介绍 k-means最早是由James MacQueen在1967年提出的,这一观点能够追溯到1957年Hugo Steinhaus所提出的想法.1957年,斯图亚特最先提出这一 ...

最新文章

  1. python做公司内部系统错误_Python程序可能导致文件系统错误?
  2. Boring Homework 二叉搜索树的打印,模拟
  3. Python 数据分析三剑客之 Matplotlib(一):初识 Matplotlib 与其 matplotibrc 配置文件
  4. 外链引入css有哪些方式_CSS 文件的4种引入方式
  5. Python matplotlib生成图片背景透明
  6. Python就业涨薪小技巧!
  7. [机器学习]关联挖掘介绍
  8. smarty缓存控制
  9. 如何把照片裁剪成证件照指定尺寸比例?
  10. 7-zip压缩解压软件.html,7-Zip 压缩率比较高的压缩软件 17.01 美化优化版
  11. 光头男人乐嘉:非典型主持人(图)
  12. 《考研-数据结构-哈弗曼树-已知某段通信报文内容,对该报文进行哈弗曼编码,并计算平均码长》
  13. Vue3 Suspense 组件
  14. 复合函数的共轭函数例子
  15. Maven导入依赖时显示Duplicated tag: ‘dependencies‘ (position: START_TAG seen ...</properties>\r\n\r\n <depen
  16. .NET操作Excel高效低内存的开源框架 - MiniExcel
  17. 微信新出置顶公众号功能,优质自媒体的春天!
  18. uin-app 小程序,获取手机号
  19. wxPython自定义控件:特殊的文本框TextCtrl
  20. mac系统降级 重装系统

热门文章

  1. similarsites的使用
  2. A collection with cascade=“all-delete-orphan“ was no longer referenced by the owning entity instance
  3. 【我的ASM学习进阶之旅】 介绍一个基于gradle transform api和ASM的字节码插件平台ByteX
  4. 但斌:买200年后还在的企业
  5. 后台实现sku 管理
  6. MYSQL:餐厅点菜、管理员工的数据库。大学数据库课程大作业(初学者,入门,用的基础知识)
  7. rgb转hsv java_RGB图像转换成HSV图像
  8. 大专文凭,一个人,我是如何月入3万的
  9. 亚信联创 java_亚信联创--java面试题目总结
  10. StringUtils 之 hasLength()