干货 | 非常全面的谱聚类算法原理总结

点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达

谱聚类算法是目前最流行的聚类算法之一,其性能及适用场景优于传统的聚类算法如k-均值算法,本文对谱聚类算法进行了详细总结,内容主要参考论文《A Tutorial on Spectral Clustering》,下载链接:https://github.com/zhangleiszu/machineLearning,若对谱聚类算法有不理解的地方,欢迎交流。

目录


1. 谱聚类模型的优化思想

2. 图的表示方法

3. 邻接矩阵的表示方法

4. 拉普拉斯矩阵定义及其属性

5. 无向图切图的含义

6. 谱聚类算法原理

7. 谱聚类算法流程

8. 拉普拉斯矩阵的选择

9. 簇类个数的选择

10. 谱聚类算法与k均值算法比较

11. 谱聚类算法的参数择优

12. 小结


1. 谱聚类模型的优化思想

上文提到若簇内的相似度高且簇间的相似度低,则聚类性能较好,因此优化聚类模型的标准是提高簇类相似度高且降低簇间的相似度。

谱聚类模型的优化思想也是基于此标准,下面定性给出谱聚类模型的目标函数:

a4ec28145d04e960d394b64270dee0c4.png

谱聚类模型优化的方法是最小化该目标函数。

谱聚类是一种基于图论的聚类算法,在介绍谱聚类算法原理之前,首先介绍下图的相关概念。


2. 图的表示方法

图G(graph)是由点的集合V(vertex)和边的集合E(edge)组成,即G=(V,E),其中V为数据集db8105bad279cc79e8853e25667456bb.png,E为样本点fff8ad94e3e7fba804baf6553f003d59.png与样本点637573599d9ddb8bfe2cddc9bdec44c5.png的权重,用35b6cfa329919a4e6b322fdd30a78630.png表示,05bc02c87b9adbb2224af5e5cda622fa.png等于0表示样本点ac044721718940d0e439ca3b6a00885e.png与样本点cead9c4ae2351f7d328de8790d4c5e9d.png没有连接。

因此对于容量为n的数据集,其图的有向邻接矩阵W表示为:694c67b81972cef91f5f801d27b31c8c.png,无向图的权重8a7977e6ff04ff4673d7ce831b5e292f.png

干货 | 非常全面的谱聚类算法原理总结_第1张图片

上图的无向权重W表示为:

干货 | 非常全面的谱聚类算法原理总结_第2张图片

定义a11498a209eebe3c103413885614c53a.png为样本点165f99b4d5e929c4d48a38f6bc0fef05.png的度:

533dd377c0977dbb3b788584456ac26d.png

样本点度的含义为所有与该样本点连接的权重之和。

数据集所有样本点的度定义为度矩阵D:

干货 | 非常全面的谱聚类算法原理总结_第3张图片

矩阵D是对角矩阵且非对角元素均为0。

下面定义指示向量9a7f57ac5a0bbc5d9fea98b7e09c32c8.png,下标A表示数据集V的一个子集,若样本点48a96f5b1020b35d0c0da3999f48e316.png,则

3d902ab196808a6183f89859c3fe82e8.png,反之702c8d872e79986c2800b80e76d98216.png

如下图,数据集976e78a7faab6e38c75b9a47d21bf296.png包含两个子集A1和A2:

干货 | 非常全面的谱聚类算法原理总结_第4张图片

因此指示向量:

be2ac92455faf05ad4c154cc0298bc4c.png

527334adc9a5f2062c40d1bee9058c26.png

易知不同子集的指示向量相互正交。

我们有两种定义子集A大小的方法:

91f5c5104c83e12782379fb2fa11073b.png

3. 邻接矩阵的表示方法

上节介绍邻接矩阵的权重即是样本间的相似度,衡量相似度的方法有 ε邻近法,K近邻法和全连接法,下面一一介绍这三种方法。

3.1  ε-邻近法

若样本间的距离小于 ε,则用权重 ε连接两个样本;样本间的距离大于ε,则连接两个样本的权重等于0。因此,图的无向权重表达式如下:

a98406f51876ccc55ef463b15aa511cd.png

其中82f51e8ddb3a4aa7f8e6ed05fe4ac460.png是样本i与样本j的距离。

 ε近邻描述样本间的权重只有ε和0,缺失了很多信息 。

3.2 k近邻法

k近邻法只考虑离该样本点最近的k个样本的权重,不在k近邻范围的样本,权重为0,然而这种定义方法会导致有向邻接矩阵,因为该矩阵并非对称矩阵,比如样本点j是样本点i的k近邻,样本点i并不一定是样本点j的k近邻。

为了使邻接矩阵是对称矩阵,我们对k近邻法有两种改进方法:第一种方法是若样本点j是样本点i的k近邻或样本点i是样本点j的k近邻,则该样本间的权重不为0,数学表达式如下:

8146ce13dc7030dc3a6a17fc3826f62b.png

第二种方法是若样本点互为k近邻,则该样本间的权重不为0,数学表达式如下:

913959faf5a5fe2015ea7d333c0f8f3c.png

3.3 全连接法

全连接法直接用相似度衡量所有的样本间权重,因此样本间的权重都大于0,常用高斯相似函数评价样本间的权重。数学表达式如下:

3afeddbe0dad4696fbe18a2e00c7f7f0.png

 ε-邻近法与k近邻法在密度分布不均的聚类任务中有较大的误差,实际项目中常用全连接法构建邻接矩阵,邻接矩阵的权重常用高斯相似函数。全连接法的缺点是构建的邻接矩阵并非稀疏矩阵,导致计算量的增加。


4. 拉普拉斯矩阵及其属性

拉普拉斯矩阵L是谱聚类算法的基础,本节介绍下面两种拉普拉斯矩阵及其属性,分别是非标准化的拉普拉斯矩阵和标准化的拉普拉斯矩阵。

4.1 非标准化的拉普拉斯矩阵

非拉普拉斯矩阵定义为度矩阵D与邻接矩阵W的差,表达式如下:

L = D - W

度矩阵D和邻接矩阵W的定义请参考二三节。

非标准化的拉普拉斯矩阵有如下属性:

(1)对于任意的n维向量e480f06ddddbb6b3511876d7276a2d50.png,有:

6754893835c7ff20d1b29ede1d2eb587.png

证明:

干货 | 非常全面的谱聚类算法原理总结_第5张图片

(2)由于D和W是对称矩阵,拉普拉斯矩阵L也是对称矩阵,由属性(1)得c73e3442a71e4635b768f5cbf5b844de.png,即拉普拉斯矩阵L是半正定矩阵。

(3)拉普拉斯矩阵L的最小特征值为0,相应的特征向量是全为1的向量。

证明:

干货 | 非常全面的谱聚类算法原理总结_第6张图片

由上式可得:f是全为1的特征向量,即1a4867881732f736139a7ba62ff4bf47.png

(4)L为半正定的对称矩阵,因此L有n个非负的实数特征值,即d853bac9264c996753230f6368f22db1.png

(5)假设图G是无向权重图,拉普拉斯矩阵的特征值为0时,对应的特征向量个数等于连通子集的个数,且该特征向量等于指示向量。假设下图G可划分为3个连通子集Ai(i=1,2,3):

干货 | 非常全面的谱聚类算法原理总结_第7张图片

即图G的拉普拉斯矩阵L特征值为0的特征向量个数为3,且该特征向量等于指示向量,结果为:

干货 | 非常全面的谱聚类算法原理总结_第8张图片

4.2 标准化的拉普拉斯矩阵

我们有两种标准化拉普拉斯矩阵的定义方法,分别为563040306fa38ce7a8626acac377ed9f.png8b388f00bc061ca5dedba6f197fbcec3.png,定义为:

8469d57ea4d52abe99739193f9248973.png

下面总结84868691901be305918b370abe9a870e.png5655b98ec3d869eaa5a68036ac7b3193.png的几个重要属性:

(1)对于任意n维向量6fc11c247ad82a892785b53456b0c0ee.png,有:

d4f50374cb787896411344a955da0d77.png

证明:

干货 | 非常全面的谱聚类算法原理总结_第9张图片

(2)若e66f7aefcd1e81775754befd67cbca03.png的特征值和特征向量分别为λ和v,那么1c0222fc0508d36107a9bbd07c87bc55.png的特征值为λ时对应的特征向量w满足:

49294c0105824ce639ecd83d2a5b7d45.png

证明:

干货 | 非常全面的谱聚类算法原理总结_第10张图片

因此24abe1846f245f609d48f3f4a3647edb.png特征值为λ时的特征向量为ffb8f7e955ea5b40ac9155705afe4e21.png

(3)若拉普拉斯矩阵L满足如下等式:

5455aab61348d562985e08a23028f3d6.png

上式左乘e68ff4806cc2715c89b8219bc8c11269.png,可得5f25c19add245a4d8a905aff540fcb5c.png的特征值和特征向量分别为λ和v。

(4)若9ac2b9e5363bc2f07726be0a4cc749ba.png的特征值和特征向量分别为0和全为1的向量L,那么可由属性(2)可得b42fa776f2e7251c9d913f52b4147297.png的特征值为0时的特征向量为ec4350f04d8b747fcb0f2441d5135404.png

(5)由属性(1)(2)可得,5242bf800c889299e87d35fb12425615.pnga7fbd83fe36c6528b27d1c01852c06aa.png有n个非负的实数特征值21d5096ecbe7217047434b67224585bc.png

(6)假设图G是无向权重图,529a6b1af85e1333c8d82716d5eb266b.png8775daff7d5184c1740a6e889732fb93.png特征值为0时的特征向量个数k等于图的连通子集的个数Ai(i=1,2,...k),a2d007f3fc31b0f5a6e7f9ae1ccc7700.png的特征向量是指示向量08a7618edec9626c0accfd4ba39ea7ac.pngd7e233eccc6369eba96136b8cc973a09.png的特征向量是99e70df252e682fa05d55cfd4a9647c9.png


5. 无向图切图的含义

无向图是由样本点和边组成,如下图的图G:

干货 | 非常全面的谱聚类算法原理总结_第11张图片

数据集的聚类可看成是无向图的切分,假设图G切分后包含两个连通的子集A,B,则AB之间的切图权重为:

6dc5ce099df150c4a2e1684b315aeeeb.png

其中ff109312ccf40e124e74c375fd0a98a0.png表示图G的邻接矩阵。

若对图G切分成k个连通子集Ai(i=1,2,...,k),最简单的方法是最小化下式:

fe60ce734070dc7580152b58be5d45c3.png

其中d0253aef0c19dfe7b67bd483a6314fda.png表示ae99453260d4c9b71c690dd92069d0c5.png的补集。

这种切分法只考虑了最小化簇间的相似度并没有考虑簇内的相似度,因此这种切分标准并不准确,如对上图G进行切分,得到如下的切分结果:

干货 | 非常全面的谱聚类算法原理总结_第12张图片

这种切分后产生的两个簇类(子集)明显是错误的,因此需要对切分方法进行优化,下一节将介绍谱聚类算法的两种切图方法。


6. 谱聚类算法原理

上一节的切图方法只考虑了簇间的相似度,导致每个簇类包含的样本数差别极大,如上一节的切分结果。因此需要用每个子集的大小对上一节的切分方法进行标准化,第二节介绍有两种定义子集大小04dda903f3f903189b1d7fc32e85dea9.png的方法,根据这这两种定义引出最常用的切图方法:RatioCut切图和Ncutt切图,本节假设簇类个数为k,即切图后的子集个数为k。

6.1 RatioCut切图

若定义子集8783b212994d2e851767b4c2add048bb.png大小为子集包含的样本个数dc14d51ba6bd95371a886c9a41220d2d.png,则RatioCut切图方法为:

ca9522ef2adfa9040c9a4005bfbbe283.png

最小化上式得到最优的切分结果,如何最小化?这就要用到之前介绍的拉普拉斯矩阵和指示向量。

由指示向量定义可知指示向量个数与簇类个数相等且指示向量维度与样本数相等,因此我们定义k个指示向量

5055b80f166646721da1efd9c9333166.png,n维指示向0ede6d5a83f36751169542fb8cccc666.png,表达式如下:

ef0d7eafc8f8c633b8809caaf0ff57ec.png

易知指示向量是单位正交向量。

看到单位正交向量,我们是不是想到了矩阵的特征值分解,下面我们计算拉普拉斯矩阵L的特征向量是指示向量时的特征值:

ab15624532a15fea3dca2639b2ccbeeb.png

由第四节拉普拉斯矩阵的第一个属性可知:

干货 | 非常全面的谱聚类算法原理总结_第13张图片

由指示向量的定义,上式等价于:

干货 | 非常全面的谱聚类算法原理总结_第14张图片

根据上式等式可得:

0aa01bc22839a256a78095aa5b88de72.png

其中Tr表示取矩阵的迹。

因此最小化d636d1d2e448fd2eaf5ba1bce51470f9.png等价于:

10f40507c215449c7be527937bf837ed.png

只需要求矩阵L的前k个最小的特征值以满足切图的最小化,取相应的k个n维特征向量组成的矩阵4baa95d15e2e1ef3debde5db90af52ef.png,对该矩阵进行k均值聚类算法,得到聚类结果cf1a6bd83728345f8984d827beece8d6.png

6.2 Ncutt切图

若定义子集cff1484db6fef2938a207e77e1d47a91.png大小为20ecddff441377faba1aabdcb530c995.png,则RatioCut切图方法为:

a609c575d235f9c7e6ef50ae3cd70b7b.png

我们定义n维指示向量938bb7b24e034897295bf872fc83023a.png,表达式如下:

84693113800335621313c0e127e6029b.png

我们同样计算6370cd4e7425702bbe0d1a2794d0a9e6.png的值:

干货 | 非常全面的谱聚类算法原理总结_第15张图片

由指示向量的性质得:

干货 | 非常全面的谱聚类算法原理总结_第16张图片

由上式推导可得:

e3204214bfbe789d87ab9166ec72a900.png

由于50639710a55adaa865f77173df2a666e.png,有8d9f7b499b6854d766ca6afdf0064199.png,其中I为单位向量。

因此,最小化d9d3a8f98814fb02b7a3ef8910cd1f8e.png等价于:

b41ac09aeeada77e0dfc50968a7e54fb.png

为了方便计算,需要将指示向量组成的矩阵转换为单位正交矩阵:

1cf95d462ad1431dfab2021c7c864e5a.png

其中U为单位正交矩阵,得:

23b6b9843be043907c5c74603b0e1a74.png

因此,最小化13bf99a933ab68ae157f2c53a746f594.png等价于:

f49ba9ac8b208909246ba529955b2e1b.png

因此只需要求矩阵28dfa7ca4cba5036636e2130536b00d2.pngb548a47cbede0558d6e32d29c160f40b.png)的前k个最小的特征值满足切图的最小化,取相应的k个n维特征向量组成的矩阵2647769391833d273e4bcbb9548975e2.png,并对该矩阵的每行进行标准化,最后对该标准化矩阵进行k均值聚类算法得到聚类结果479c151459a52c465eb3e3403fb563f7.png

或者求矩阵3c0cb351ab98531d50d9f08622ee6bc0.png的前k个最小的特征值对应的特征向量,除了不需要进行行标准化外,算法步骤与bf21fa563e2babec9f91d238fa3bb9e5.png一致。bfb609b4a94ca27514f9306c43865255.png的特征向量v可以通过属性3求解:

6d399d65b208e20f7749740fbf119dce.png

由于1487d71ebabff981c77181311cb8895d.png33adcbb82373a72e5a00dee9bcda3321.png是标准化的拉普拉斯矩阵,因此 Ncutt切图也称为标准化的谱聚类算法,RatioCut切图称为非标准化的谱聚类算法。


7. 谱聚类算法流程

谱聚类算法包括非标准化的谱聚类算法和标准化的谱聚类算法,本节介绍这两种谱聚类的算法步骤。

输入:相似矩阵907140d9ca402d0941ad0c982456a3c7.png,簇类个数等于k

非标准化的谱聚类算法流程:

1)计算邻接矩阵W和度矩阵D;

2)计算非标准化的拉普拉斯矩阵L;

3)计算矩阵L的k个最小特征值对应的n维特征向量2417fd9b123aacf831d46eb7adf54bdb.png

4)k个n维特征向量bd0932ae1e9411d2bb221937f3ec05cb.png组成n×k维的矩阵M;

5)每一行表示一个样本,对该n个样本进行k均值聚类算法,得到聚类结果ab2574e37a82203e121878220007163d.png

标准化的谱聚类(5e3393c5d3658d5a08eb1f5b5c0bf19c.png)算法流程:

1)计算邻接矩阵W和度矩阵D;

2)计算标准化的拉普拉斯矩阵e12df456de284b18f1a595236095fea7.png

3)计算矩阵ccc8c4ccbbda200e4bdfd8daeb81469c.png的k个最小特征值对应的n维特征向量ee35fff5651a6c8081cf83ea1c649612.png

4)k个n维特征向量a8eaa969edfa3bde954a64165144b949.png组成n×k维的矩阵M;

5)行标准化矩阵M:

aa918035fc82acaec6a068bacb688ea9.png

6)每一行表示一个样本,对该n个样本进行k均值聚类算法,得到聚类结果3b8da0bbb4af9d98a0277b509f7de513.png

标准化的谱聚类(39c949901dcf64dbc5536c46147c3197.png)算法流程:

1)计算邻接矩阵W和度矩阵D;

2)计算标准化的拉普拉斯矩阵6db53a48ac97fbe98e01fca4cef81b64.png

3)计算矩阵1929f16fd01e4e2e43621c1e449d379f.png的k个最小特征值对应的n维特征向量c8831666c8f3b3619ffb444a75a98c63.png,通过下式求解特征向量:

8f3c105ebabe3857b07f3e2b2fc1292a.png

4)k个n维特征向量16ca050fdde3d776dc21ee4d7ad66bf1.png组成n×k维的矩阵M;

5)每一行表示一个样本,对该n个样本进行k均值聚类算法,得到聚类结果30e94ad39e23169abaeaf03a1cb1dc52.png


8. 拉普拉斯矩阵的选择

本文介绍了三种拉普拉斯矩阵的算法,选择哪一种算法是谱聚类的一个基本问题。如果图是规则的且大多数样本点的度近似相等,选择任何一种拉普拉斯矩阵都是可行的。如果图中大多数样本点的度相差较大,建议使用标准化的拉普拉斯矩阵。

标准化的拉普拉斯矩阵建议使用533bb985bd5d7e3bcada1d6e6cfb8196.png,由标准化的拉普拉斯矩阵属性可知:若809234e7d24277d9c2507a45586f6b24.png的特征向量是指示向量1cda7d24644ce8e00a114a68c9de8f84.png,则1a757917632d8559216a1662450dcbfd.png的特征向量是指示向量与f7ca2169b81d5d1d1e6c63975a6d18c4.png的乘积,这可能会带来不可预知的误差,因此标准化的拉普拉斯矩阵使用3767e56ffa9ee1dbf123c27696077696.png

为什么标准化的拉普拉斯矩阵比非标准化的拉普拉斯矩阵好?

原因:非标准化的拉普拉斯矩阵对应RatioCut切图,RatioCut切图描述簇内的相似度为簇内包含的样本个数|A|,标准化的拉普拉斯矩阵对应Ncutt切图,Ncutt切图描述簇内的相似度为vol(A)。由于vol(A)比|A|更能体现簇内的相似度,因此选择标准化的拉普拉斯矩阵。


9. 簇类个数的选择

谱聚类算法的第一个问题是簇类个数的选择,常用的方式是使用启发式的特征值差值搜索(eigengap heuristic),含义:若前k个特征值很小,且第k+1个特征值与前一个特征值相差比较大,则簇类个数选择k。为什么选择前k个最小的特征值作为簇类个数?我们假设图G可切分为k个完全没有交集的连通子集,那么有k个特征值等于0,第k+1个特征值大于0。因此可以设想特征值越小聚类的性能亦越好,选择特征值很小的个数作为簇类个数。

如下图不同簇类的样本分布:

6c7ba4b72100421ebf862d5d56873cad.png

我们对服从上图分布的样本集选择10近邻法构建相似矩阵,画出3b58f10d8ab4dbb9cfb609abcd2142a0.png的前10个最小的特征值图:

15ef33cc517691a6c96d0583a3c9069e.png

由上图可知,前4个特征值等于0,即ea9760a2eb1283d0b059107c83c10093.png,第5个特征值大于0且与前一个特征值相差较大,因此选择簇类个数为4,符合样本集的分布理论。

若不同簇类的样本分布有重叠,如下图:

干货 | 非常全面的谱聚类算法原理总结_第17张图片

我们画出cc410a0df65b87714e727b3a8ca0c742.png的前10个最小的特征值图:

干货 | 非常全面的谱聚类算法原理总结_第18张图片

由上图可知,特征值相差不明显,可能选择k=3或k=4。若不同簇类的样本分布存在严重的重叠,这种选择k值的算法也会给出模糊的结果。


10. 谱聚类算法与k均值算法比较

上文提到k均值算法在各向异性的数据集和非凸数据集的表现很差,谱聚类算法可以很好的处理这类数据集。

各向异性的数据集聚类对比:

干货 | 非常全面的谱聚类算法原理总结_第19张图片

非凸数据集的聚类对比:

干货 | 非常全面的谱聚类算法原理总结_第20张图片

# 非凸数据集
from sklearn import datasets
from sklearn import cluster
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
plt.figure(figsize=[6,6])
n_samples = 1500
noisy_circles = datasets.make_circles(n_samples=n_samples, factor=.5, noise=.05)
plt.scatter(noisy_circles[0][:,0],noisy_circles[0][:,1],marker='.')
plt.title("non-convex datasets")
plt.show()
# k=2训练数据,k-means聚类算法
y_pred = KMeans(n_clusters=2, random_state=random_state).fit_predict(noisy_circles[0])
plt.scatter(noisy_circles[0][:, 0], noisy_circles[0][:, 1], marker='.',c=y_pred)
plt.title("k-means clustering")
plt.show()
# spectralClustering聚类算法
y_pred = cluster.SpectralClustering(n_clusters=2,affinity="nearest_neighbors").fit_predict(noisy_circles[0])
plt.scatter(noisy_circles[0][:, 0], noisy_circles[0][:, 1], marker='.',c=y_pred)
plt.title("spectralClustering")
plt.show()


11. 谱聚类算法的参数择优

为了使聚类结果可视化,我们生成各向异性的二维数据集:

random_state = 170
n_samples =1500
X, y = datasets.make_blobs(n_samples=n_samples, random_state=random_state)
transformation = [[0.6, -0.6], [-0.4, 0.8]]
X_aniso = np.dot(X, transformation)
aniso = (X_aniso, y)
plt.figure()
plt.scatter(X_aniso[:,0],X_aniso[:,1],marker='.')
plt.show()

根据上一节的可视化图设置k=3,使用默认的谱聚类算法参数的聚类效果:

干货 | 非常全面的谱聚类算法原理总结_第21张图片

我们利用Caliniski-Harabaz指数评价聚类结果:

# 参数择优
from sklearn import metrics
for index, gamma in enumerate((0.01,0.1,1,10,15)):
    y_pred = cluster.SpectralClustering(n_clusters=3, gamma=gamma).fit_predict(X_aniso)
    print("Calinski-Harabasz Score with gamma=", gamma, "score:", metrics.calinski_harabaz_score(X, y_pred))

#>
	Calinski-Harabasz Score with gamma= 0.01 score: 5506.749740179376
	Calinski-Harabasz Score with gamma= 0.1 score: 875.228683610666
	Calinski-Harabasz Score with gamma= 1 score: 3023.915226286713
	Calinski-Harabasz Score with gamma= 10 score: 10633.868943793219
	Calinski-Harabasz Score with gamma= 15 score: 10633.868943793219

从上面的结果分析,我们粗略的知道gamma在10附近有较好的聚类性能:

# 在10附近找寻最优参数
for gamma in np.linspace(9,11,5):
    y_pred = cluster.SpectralClustering(n_clusters=3, gamma=gamma).fit_predict(X_aniso)
    print("Calinski-Harabasz Score with gamma=", gamma,"score:", metrics.calinski_harabaz_score(X, y_pred))

#>
	Calinski-Harabasz Score with gamma= 9.0 score: 10454.66879752764
	Calinski-Harabasz Score with gamma= 9.5 score: 10454.66879752764
	Calinski-Harabasz Score with gamma= 10.0 score: 10633.868943793219
	Calinski-Harabasz Score with gamma= 10.5 score: 10633.868943793219
	Calinski-Harabasz Score with gamma= 11.0 score: 10633.868943793219

因此,我们设置rbf核的参数gamma为10

y_pred = cluster.SpectralClustering(n_clusters=3,gamma=10).fit_predict(X_aniso)
plt.scatter(X_aniso[:,0],X_aniso[:,1],c =y_pred,marker='.')
plt.show()

聚类效果如下图:

干货 | 非常全面的谱聚类算法原理总结_第22张图片


12. 小结

谱聚类是基于图论的聚类算法,思想是图切分后的子集间有较低的相似度且子集内有较高的相似度,实现方法是对图的拉普拉斯矩阵降维再利用k均值聚类算法,谱聚类相比k-means在中小数据集有更广泛的应用。

参考:

<>

https://www.cnblogs.com/pinard/p/6235920.html

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

干货 | 非常全面的谱聚类算法原理总结_第23张图片

干货 | 非常全面的谱聚类算法原理总结_第24张图片

你可能感兴趣的:(聚类,算法,python,机器学习,人工智能)