前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >拉普拉斯矩阵及谱聚类

拉普拉斯矩阵及谱聚类

作者头像
AIHGF
发布2019-02-18 11:14:56
1.8K0
发布2019-02-18 11:14:56
举报
文章被收录于专栏:AIUAIAIUAI

拉普拉斯矩阵及谱聚类(Laplacian Matrix and Spectral Clustering)

与相似性度量相关的论文中经常出现拉普拉斯矩阵(Laplacian Matrix),根据维基百科的描述,该矩阵在图论中运用较多。本文主要介绍在谱聚类中的应用。首先给出一个谱聚类的直观结果,然后介绍Laplacian Matrix的一些性质,最后讨论谱聚类。

通过模拟生成一系列的数据分别用k-means和谱聚类的方法进行聚类,结果如下:

通过结果便可以直观的看出两种聚类的差异了。对于都聚成3类的情况,k-means是随机的选择3个聚类中心,然后将其他的样本点归到离自己最近的中心,对分好的3类求出均值作为新的聚类中心,如此迭代,直至聚类中心收敛。而谱聚类首先求出相似度矩阵W,可以选择高斯相似度函数:

。然后计算出Laplacian matrix L (L = D - W, 其中D是degree matrix,是一个对角阵,每一个值对应相似度矩阵W中每一行的和)。计算L的前k个最小的特征向量,把这k个列向量排列在一起组成一个n*k的矩阵,其中每一行看作k维空间中的一个向量,并使用k-means算法进行聚类,其原理文章后面会进行推导。

通过不同的聚类方法可以得到不同的结果,评价聚类结果需要根据现实场景。比如上图像是两个pizza,每一圈代表不同的馅料,最里面是一圈海鲜,中间是烤肉,最外一圈是芝士。要将其分给3个人,如果这3个人都想尝尝不同的味道,那么可以按k-means分,如果一个只喜欢吃芝士,一个只喜欢烤肉,一个只喜欢海鲜,那么当然spectral cluster靠谱。多一种聚类方式多适应一种场景。

1. Unnormalized Laplacian Matrix

首先介绍没有正则化的拉普拉斯矩阵的性质。拉普拉斯矩阵L定义为:

L有如下一些性质:

  • 对于任意的n维向量f,有

  • L是对称,并且是半正定的。该性质可以由f'Lf>=0得到。
  • L的最小的特征值为0,对应的特征向量是常数且不为零的值都相等。如果是由一个连通的图得到的相似矩阵,则对应的特征向量所有值为1.

举个例子:如下两幅图,图中连接的边的权重都为1。由此可以得到图1和图2的拉普拉斯的矩阵L1和L2。

求得L1的特征值为0, 1, 1, 4,0特征值对应的特征向量为(-0.5 -0.5 -0.5 -0.5)L2的特征值为0, 0, 1, 1, 2, 4,0特征值对应的特征向量为(-0.5 -0.5 -0.5 -0.5 0 0)和(0 0 0 0 -0.707 -0.707)。验证了前面第三条性质。对于一个有n个连通分部的图而言,其对应的拉普拉斯矩阵有n个为零的特征值。

Unnormalized Laplacian Matrix和Unnormalized Laplacian Matrix的区别只在于对矩阵L的是否进行了规范化,规范化的方式有以下两种,对应的谱聚类方式也分为Unnormalized Spectral Clustering和Normalized Spectral Clustering。

2. Spectral Clustering

Unnormalized Spectral Clustering的聚类算法描述如下,Matlab代码在最后给出。

  • 求出输入样本的相似度矩阵,可以用knn,也可以利用整个数据集。使用knn可以降低相似度的计算量。
  • 计算拉普拉斯矩阵,可以按需要进行规范化。
  • 求拉普拉斯矩阵的最小的k个特征值及相应的特征向量。
  • 把这k个列向量排列在一起组成一个n*k的矩阵,其中每一行看作k维空间中的一个向量,并使用k-means算法进行聚类。

下面是一个比较有趣的实验,图片来自论文A Tutorial on Spectral Clustering [PDF]。实验生成了200个样本点,来自于4个混合高斯分布,其均值分别是2、4、6、8。这里解释最复杂的最后一行。

最后一行中,采用了full graph计算相似度,所以样本点整体形成了一个网络,因此对应的拉普拉斯矩阵中含有一个为0的特征值,且该特征值对应的Eigenvector 1为常向量,向量中的各元素都相等。我们选择最小的4个特征值进行聚类,从图中可以看到,除第一个特征值外,其余Eigenvector 2-4 包含了聚类信息。以0作为阈值,Eigenvector 2可以将2、4和6、8分开;Eigenvector 3可以将2、8和4、6分开;Eigenvector 4可以将2、6和4、8分开。至此,样本可以被完美的分为4类,分别是2、4、6、8各一类。

谱聚类的原理可以通过Graph Cut、Random Walks以及Perturbation Theory来解释。以后的博文中会做相应的补充。

3. 谱聚类的Matlab实现

谱聚类的Matlab实现比较简单,下面给出的代码中求相似度矩阵部分对for循环进行了向量化(提高了运行效率但是比较难看懂)。通过运行该代码便可以得到本文开头的图片。

function spectral_cluster() %% Generate sample data points_per_cluster = 500; num_cluster = 3; bandwidth = 0.1; data = zeros([num_cluster*points_per_cluster, 2]); index = 1; for k = 1 : num_cluster for n = 1 : points_per_cluster theta = 2 * pi * rand; rho = k + randn(1) * bandwidth; [x, y] = pol2cart(theta, rho); data(index,:) = [x, y]; index = index + 1; end end %% Kmeans mincenter = kmeans(data, num_cluster); group1 = (mincenter == 1); group2 = (mincenter == 2); group3 = (mincenter == 3); figure; hold on; plot(data(group1,1), data(group1,2), 'r.'); plot(data(group2,1), data(group2,2), 'b.'); plot(data(group3,1), data(group3,2), 'y.'); axis square; grid on; hold off; %% Spectral Clustering sigma = 0.1; s1s2 = -2 * data * (data'); ss = sum(data.^2,2); % similarity matrix (vectorlized) % s(x_i, x_j) = exp(-|x_i - x_j|^2 /(2 * sigma^2)) A = exp( -(s1s2 + repmat(ss, 1, length(ss)) + repmat(ss', length(ss), 1))/(2*sigma^2)); D = diag(sum(A')); L = D - A; [X, ~] = eigs(L, num_cluster, 'SM'); Y = X ./ repmat(sqrt(sum(X.^2, 2)), 1, num_cluster); mincenter = kmeans(Y, num_cluster); group1 = (mincenter == 1); group2 = (mincenter == 2); group3 = (mincenter == 3); figure; hold on; plot(data(group1,1), data(group1,2), 'r.'); plot(data(group2,1), data(group2,2), 'b.'); plot(data(group3,1), data(group3,2), 'y.'); axis square; grid on; hold off; end

本文的引用链接为:http://www.iwenchao.com/machine-learning/laplacian-matrix-and-spectral-clustering.html,转载请注明出处。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年03月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档