参考https://www.cnblogs.com/pinard/p/6221564.html

谱聚类(spectral clustering)是一种基于图论的聚类算法,第一步是构图:将数据集中的每个对象看做空间中的点V,将这些点之用边E连接起来,距离较远的两个点之间的边权重值较低、距离较近的两个点之间的边权重值较高,这样就构成了一个基于相似度的无向权重图G(V,E)。第二步是切图:按照一定的切边规则将图切分为不同的子图,规则是使子图内的边权重和尽可能大,不同子图间的边权重和尽可能小,从而达到聚类目的。

与传统的聚类方法相比,谱聚类可以对任意形状的数据集进行聚类,计算量较小、实现简单、聚类效果好并能收敛于全局最优解。

一、谱聚类构图

1、无向权重图G(V,E)

V为数据集中所有点(v1,v2,...,vm),定义任意两点vi、vj之间的权重为wij,由无向图的性质可知wij=wji

对于有连接边的两点wij>0;对于没有连接边的点wij=0。

2、度矩阵D

无向权重图中任意一点vi的度di定义为它和其它点的边的权重之和

利用每个点度的定义,得到一个m*m的度矩阵D,这是一个对角矩阵,主对角线元素为di,其他位置的元素全为零。

3、相似矩阵W

用所有点之间的权重值构建图的m*m相似矩阵W,第i行第j列对应权重wij

,对角线元素w11=w22=...=wmm=0

距离较远的两个点之间权重较低,较近的两个点权重较高,W有三种构建方法:

(1)ε-近邻法:

设置一个阈值ε,用欧氏距离sij来度量任意两点vi、vj的距离,如果距离小于阈值则将二者连接起来:

sij>ε → wij=0;sij≤ε → wij=ε。这种度量方式很不精确,很少使用。

(2)k-近邻法:

利用kNN算法遍历所有的样本点,取每个样本最近的k个点作为近邻连接起来,即只有与样本最近的k个点之间wij>0。

注意此时会形成有向图wij≠wji,有两种方法可以转化为无向图:

a. 只要有一个点在另一个点的k近邻当中,则保留sij

b. 两个点都必须互为k近邻的时,才保留sij

(3)全连接法:

将所有的点都相互连接起来,所有边的权重为相似度。此方法所有的点权重都值大于0,可以选择不同的核函数定义边权重,常用的有多项式核函数、高斯核函数、拉普拉斯核函数、Sigmoid核函数等,最常用的是高斯核函数RBF:

前两种方法可以构建出稀疏矩阵,适合大数据集;第三种则相反,在大数据集中速度速度较低。

4、拉普拉斯矩阵L

定义L=D-W,性质:

(1)L是对称的、半正定矩阵;

(2)特征值中0出现的次数就是图连通区域的个数;

(3)最小特征值是0,因为L矩阵每一行的和均为0;

(4)最小非零特征值是图的代数连通度;

(5)对于任意向量f=(f1,f2,...,fm)T,有:

证明:由于D是对角矩阵,wij=wji,且:

二、谱聚类切图Graph Cut

将无向图G(V,E)切成若干相互没有连接的k个子图(sub-Graph)A1,A2,...Ak,p=1,2,...,k,

其中Ap∩Ap=∅,A1∪A2∪...∪Ak=V。

对于任意的子图Ap,Ap⊂V,定义切图的权重为:

对于k个子图集合A1,A2,...Ak,定义切图cut为:

其中为Ap的补集,就是除了Ap以外其他V的子集的并集。

被切断的边的权值总和称为cut值,为了让这个值尽可能小,有以下几种切图方法:

1、最小割集准则(Minimum Cut)

选择权重最小的边切割,容易产生只包含几个顶点的较小子图的歪斜分割现象。虽然可以最小化cut值,但这种方式往往不是我们需要的最优切图。

2、比例割集准则(Ratio Cut)

这种切图方式不仅考虑最小化cut值,同时考虑最大化每个子图包含的点的个数:

对{A1,A2,...Ak}引入一个k*m维的指示矩阵H={h1,h2,...,hk},其中hp是一个m维向量。用i,j∈Rm表示样本下标,p∈Rk表示子集下标。每个子集Ap对应一个指示向量hp,则样本q对子集p的指示为:

因此求最小化RatioCut的值的问题就转化为求arg minH tr(HTLH),且HTH=I。根据普通瑞利商Rayleigh quotient的定义和拉格朗日乘子法:

,其中c为常数

可知R的最大值是L的最大特征值,R的最小值是L的最小特征值。最小的若干个特征值相加,最终使得RatioCut达到最小。通过找到k(k远小于m)个最小特征值,使用维度规约的思想近似解决这个NP难问题。由于损失了部分信息,导致优化后的H不能完全指示各样本的归属,因此对m*k维的新矩阵标准化后的每个特征向量进行传统聚类,得到最终的谱聚类结果。

3、规范割集准则(Normalized Cut)

Ncut这种切图方式是对RatioCut的一种改进,将RatioCut的分母换成子图内所有顶点间连接权值之和vol(Ap),由于子图样本个数多并不一定权重就大,因此这种基于权重的切图方法更符合实际情况。

        

Ncut切图对H进行了改进:

此时HTH≠I,而是HTDH=I:

令H=D-1/2F,则HTLH=FTD-1/2LD-1/2F,HTDH=FTF=I,因此优化目标变为:arg minF tr(FTD-1/2LD-1/2F) s.t. FTF=I

D-1/2LD-1/2相当于对L进行了一次标准化,即。之后的步骤类似RatioCut。

三、谱聚类算法总结

谱聚类是对数据拉普拉斯矩阵的特征向量进行聚类的算法,其本质是将聚类问题转换为图的最优化分问题,是一种点对聚类算法。常用的相似矩阵生成方法是基于k近邻或高斯核的全连接方式,常用的切图方式是Ncut,最后一步的传统聚类常用K-means。

1、谱聚类的构建过程主要步骤:

(1)构建表示对象相似度的矩阵W,W=Σijwij,i,j=1,2,...,m;

(2)构建度矩阵D(对角矩阵);

(3)计算拉普拉斯矩阵L,L=D-W,对L进行标准化D-1/2LD-1/2

(4)计算前k个最小特征值的特征向量;

(5)将k个特征向量组成m*k维的矩阵,按行进行标准化得到矩阵F;

(6)对矩阵F中的每一行作为一个k维样本,共m个样本,用传统方法进行聚类得出最终结果。

2、谱聚类的特点

(1)处理稀疏数据的聚类很有效;

(2)由于使用降维的方法,处理高维数据时复杂度比传统聚类算法好;

(3)聚类效果依赖于相似矩阵,不同的相似矩阵得到的最终聚类效果可能很不相同;

(4)最小特征值k的数目不容易给定;

(5)文档聚类中和模糊聚类的方法结合的问题;

(6)计算大规模数据集矩阵的时间、空间效率较差。

3、应用场景

图形聚类、计算机视觉、非凸球形数据的聚类等。

在存储图片的时候,可在清晰度和图片大小两方面进行权衡,将一个清晰的图片转换成为一个相对不太清晰的图片,但是存储的图片大小会下降很多。基于聚类算法的减小图片大小的方式,使用K-means算法对图片进行聚类矢量化图片,从而达到压缩图片的效果。

4、各个聚类算法比较:

算法

效率

聚类形状

异常数据的抗干扰性

高维性

K-means

一般

凸形

较低

较低

BIRCH

很高

凸形

较低

较低

CURE

较高

任意形状

很高

一般

DBSCAN

一般

任意形状

较低

较高

Spectral

较高

任意形状

不敏感

较高

机器学习之谱聚类算法相关推荐

  1. 机器学习(十一)谱聚类算法

    谱聚类算法 原文地址:http://blog.csdn.net/hjimce/article/details/45749757 作者:hjimce 一.算法概述 谱聚类算法建立在谱图理论基础上,与传统 ...

  2. python谱聚类算法_Python机器学习高级算法!谱聚类(Spectal Clustering)算法分析和实例详解...

    谱聚类(Spectal Clustering)算法是聚类算法的一种,比起传统的K-Means聚类算法,谱聚类算法的效果更优秀,其计算量也小很多,除了谱聚类和K-Means聚类算法,另外还有密度聚类和层 ...

  3. 【机器学习】5:谱聚类算法原理介绍

    前言:学习谱聚类,最好有一些图论.矩阵分解(SVD)方面的知识,这样会更加有利于谱聚类的学习.当然,谱聚类理解起来并不困难,实际操作也大多是谱聚类+K-means聚类联合使用的. –--------- ...

  4. 聚类(下) 谱聚类算法

    谱聚类算法 该算法首先根据给定的样本数据集定义一个描述成对数据点相似度的亲合矩阵,并且计算矩阵的特征值和特征向量 , 然后选择合适 的特征向量聚类不同的数据点.谱聚类算法最初用于计算机视觉 .VLS ...

  5. 谱聚类算法入门教程(一)——Introduction

    该教程记录了我从一个聚类算法小白学习谱聚类算法的过程,在开始学习之前,请确保你了解下面的知识: 线性代数矩阵的相关性质 导数的相关知识 欧式距离 图的基本知识 如果你学过上面的知识但是忘记了也没关系, ...

  6. 谱聚类python代码_Python 谱聚类算法从零开始

    谱聚类算法是一种常用的无监督机器学习算法,其性能优于其他聚类方法. 此外,谱聚类实现起来非常简单,并且可以通过标准线性代数方法有效地求解. 在谱聚类算法中,根据数据点之间的相似性而不是k-均值中的绝对 ...

  7. 聚类算法小结(2)——谱聚类算法

    上一篇博客中简单介绍了K均值聚类算法,在本篇博客中介绍一下关于谱聚类算法,简单谈一谈自己的心得.简单介绍一下谱聚类算法 谱聚类算法建立在谱图理论基础上,与传统的聚类算法相比,它具有能在任意形状的样本空 ...

  8. 小白入门谱聚类算法原理与实现

    小白入门谱聚类算法原理与实现 小白入门谱聚类算法原理与实现 1. 谱聚类是什么? 2.谱聚类步骤 2.1 谱聚类构图 2.2 谱聚类切图 2.2.1RatioCut 2.2.2Ncut 3谱聚类实现 ...

  9. 机器学习入门:聚类算法-5

    机器学习入门:聚类算法 1.实验描述 本实验先简单介绍了一下各聚类算法,然后利用鸢尾花数据集分别针对KMeans聚类.谱聚类.DBSCAN聚类建模,并训练模型:利用模型做预测,并使用相应的指标对模型进 ...

最新文章

  1. robot wireless communication
  2. Java网络编程3---Socket-UDP编程
  3. 理论基础 —— 二叉树
  4. R7-1 正整数A+B (15 分)
  5. python sklearn 支持向量机_python机器学习库sklearn之支持向量机svm介绍
  6. 通过mysqlslap与sysbench对MySQL进行压测
  7. ftp中转服务器,bat实现的ftp中转
  8. 基于微信小程序的学生活动管理系统的设计与实现
  9. 14串聚合物锂电池保护板和电路图(带均衡功能)
  10. 观察者模式及其应用场景
  11. spss进行相关性分析
  12. 多域名HTTPS 证书
  13. Codeforces Gym 100015 简要题解
  14. “互联网+教育”促进优质资源共享
  15. 正则去掉首尾空格以及首尾的
  16. Oracle-SQL-group by-报错:不是单组分组函数
  17. IDEA 2020主菜单隐藏了
  18. js replace 与replaceall实例用法
  19. Cannot unpack file C:\Users\ADMINI~1\AppData\Local\Temp\pip-ilsapnxq-unpack\simple.htm
  20. 电子计算机的说明文600字,关于电脑的说明文作文600字

热门文章

  1. 虚拟DOM(VNode Virtul DOM )
  2. 互联网公司应该怎么发展猎头业务
  3. Spring AOP实例 Junit4单元测试
  4. Go语言核心36讲(Go语言实战与应用十二)--学习笔记
  5. uCOS2源码分析3-RTOS核心代码视频课程-第4季第4部分-朱有鹏-专题视频课程
  6. 从实际案例看收到337调查签发之排除令后的应对策略
  7. unpickling stack underflow
  8. echarts 世界地图标点_ECharts添加地图标点(笔记)
  9. Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器
  10. mysql ibp_【MySQL】值得关注的参数