`
deepfuture
  • 浏览: 4400341 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80073
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70040
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103346
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:285797
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15012
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67554
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32147
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45986
社区版块
存档分类
最新评论

谱聚类

阅读更多

1. 谱聚类

      给你博客园上若干个博客,让你将它们分成K类,你会怎样做?想必有很多方法,本文要介绍的是其中的一种——谱聚类。
      聚类的直观解释是根据样本间相似度,将它们分成不同组。谱聚类的思想是将样本看作顶点,样本间的相似度看作带权的边,从而将聚类问题转为图分割问题:找到一种图分割的方法使得连接不同组的边的权重尽可能低(这意味着组间相似度要尽可能低),组内的边的权重尽可能高(这意味着组内相似度要尽可能高)。将上面的例子代入就是将每一个博客当作图上的一个顶点,然后根据相似度将这些顶点连起来,最后进行分割。分割后还连在一起的顶点就是同一类了。更具体的例子如下图所示:

在上图中,一共有6个顶点(博客),顶点之间的连线表示两个顶点的相似度,现在要将这图分成两半(两个类),要怎样分割(去掉哪边条)?根据谱聚类的思想,应该去掉的边是用虚线表示的那条。最后,剩下的两半就分别对应两个类了。
      根据这个思想,可以得到unnormalized谱聚类和normalized谱聚类,由于前者比后者简单,所以本文介绍unnormalized谱聚类的几个步骤(假设要分K个类):
(a)建立similarity graph,并用 W 表示similarity graph的带权邻接矩阵
(b)计算unnormalized graph Laplacian matrix L(L = D - W, 其中D是degree matrix)
(c)计算L的前K个最小的特征向量
(d)把这k个特征向量排列在一起组成一个N*k的矩阵,将其中每一行看作k维空间中的一个向量,并使用 K-means 算法进行聚类

 

2. 算法原理解析

     这一节主要从大体上解释unnormalized谱聚类的四个步骤是怎么来的,不涉及具体的公式推导。
(a)谱聚类的思想就是要转化为图分割问题。因此,第一步就是将原问题转化为图。转为图有两个问题要解决:一是两个顶点的边要怎样定义;二是要保留哪些边。
      对于第一个问题,如果两个点在一定程度上相似,就在两个点之间添加一条边。相似的程度由边的权重表示(上图中边上面的数值就是权重了)。因此,只要是计算相似度的公式都可用,不过常用的是Gaussian similarity function
      要保留部分边的原因有:边太多了不好处理;权重太低的边是多余的。常用的保留边的方法是建立k-nearest neighbor graph。在这种图中,每个顶点只与K个相似度最高的点连边。

 

(b)unnormalized graph Laplacian matrix(以下用L表示)有很多很好的性质,也正是这个原因,才要在第二步中计算这么一个矩阵。最重要的性质是下面这一组性质:

这一组性质将在之后的公式推导中起到决定性作用。

 

(c)将原问题转化为图后,接下来的工作就是决定怎样分割了。图分割问题实际上就是最小割问题(mincut problem)。最小割问题可定义为最小化以下目标函数:

其中k表示分成k个组,Ai表示第i个组,表示第Ai的补集,W(A,B)表示第A组与第B组之间的所有边的权重之和。
      这个式子的直观意义:如果要分成K个组,那么其代价就是进行分割时去掉的边的权重的总和。可惜的是直接最小化这式子通常会导致不好的分割。以分成2类为例,这个式子通常会将图分成这样的两类:一个点为一类,剩下的所有点为另一类。显然,这样的分割是很不好的。因为我们期望着每个类都有合理的大小。所以,要对这个式子进行改进,改进后的公式(称为RatioCut)如下:

其中|A|表示A组中包含的顶点数目。
      在RatioCut中,如果某一组包含的顶点数越少,那么它的值就越大。在一个最小化问题中,这相当于是惩罚,也就是不鼓励将组分得太小。现在只要将最小化RatioCut解出来,分割就完成了。不幸的是,这是个NP难问题。想要在多项式时间内解出来,就要对这个问题作一个转化了。在转化的过程中,就用到上面提到的L的那一组性质,经过若干推导,最后可以得到这样的一个问题:


其中H是一个矩阵,它的元素的定义(Eq.(5))如下:

      如果H矩阵的元素不为0,则说明第i个点属于第j个类。也就是说,只要得到H矩阵,就能知道要怎样分割了。可惜的是,这个问题仍然是NP难问题。但是,如果我们让H矩阵的元素能够取任意值,这个问题就变成多项式时间内可解的了,此时问题变为:


      根据Rayleigh-Ritz theorem,这个问题的解是L的前k个最小的特征向量组成的矩阵H,其中特征向量是按列来排,即H的每一列,均为一个特征向量。

 

(d)在第三步中,我们为了松驰NP难问题,让H矩阵取任意值,因此,解出来的H矩阵不再具有原来的性质——元素值能指出哪个点属于哪一类。尽管如此,对于k-means来说,将H矩阵的每一行当作一个点进行聚类还是挺轻松的。因此,用k-means对H矩阵进行聚类作为谱聚类的最终结果。

分享到:
评论

相关推荐

    谱聚类算法MATLAB

    谱聚类算法是一种在数据挖掘和机器学习领域广泛使用的非监督学习方法,它主要用于无标签数据的分类。MATLAB作为一种强大的数值计算和可视化工具,是实现谱聚类的理想选择。本资源提供了一种结合杰卡德相似性系数与...

    空间一致性约束谱聚类算法用于图像分割

    ### 空间一致性约束谱聚类算法用于图像分割 #### 概述 近年来,随着计算机视觉技术的发展,图像分割作为图像处理中的一个重要环节受到了广泛关注。图像分割的主要目的是将图像分成若干个有意义的区域,这些区域...

    谱聚类matlab实现

    谱聚类是一种在机器学习和数据挖掘领域广泛应用的无监督学习方法,主要用于数据的聚类。这种方法基于图论,通过构建数据之间的相似性图,并利用图的谱性质来进行聚类。在MATLAB中,实现谱聚类的过程主要包括以下几个...

    归一化谱聚类算法

    谱聚类算法是一种在机器学习领域广泛应用的数据分析技术,它主要用作无监督学习方法,用于发现数据中的潜在结构和群组。此算法基于图论的概念,通过构建数据点之间的相似性图,然后寻找能够最小化切割代价的分割方式...

    C#谱聚类,支持大量文本聚类

    谱聚类是一种无监督机器学习方法,用于将数据集中的对象分组到不同的类别或簇中,无需预先知道目标类别。在C#中实现谱聚类,我们可以利用.NET框架的强大功能,结合自然语言处理技术来处理大量文本数据。C#是微软开发...

    谱聚类实现Matlab程序

    谱聚类是一种无监督机器学习方法,常用于数据聚类,尤其在高维数据处理中表现出色。在Matlab环境中,实现谱聚类可以利用其强大的矩阵运算和算法库。本资源包提供了一个Matlab环境下的谱聚类实现,简化了用户对数据...

    谱聚类(spectral clustering)理解

    ### 谱聚类(Spectral Clustering)深入解析 #### 一、谱聚类概述 **谱聚类**是一种基于图论的机器学习方法,主要用于处理无监督学习任务中的聚类问题。与传统的聚类算法(如K-means、层次聚类等)相比,谱聚类...

    谱聚类算法对数据点进行分类

    谱聚类算法是一种在机器学习领域广泛使用的无监督学习方法,它主要应用于数据点的分类和聚类。这种算法基于图论的概念,通过构建数据点之间的相似性图谱,然后找到能够最大程度切割图的最优分割,以此实现数据点的...

    谱聚类入门文献 外文

    ### 谱聚类入门与图像分割应用 在近年来,谱聚类算法因其高效、简单且经常优于传统聚类算法(如k-means)而成为数据挖掘和机器学习领域的一颗新星。本文旨在深入探讨由Ulrike von Luxburg撰写的《谱聚类教程》中的...

    谱聚类MATLAB实现

    谱聚类是一种在数据挖掘和机器学习领域广泛应用的无监督学习方法,主要用于将数据集划分为不同的类别或簇。在MATLAB中实现谱聚类,我们可以利用其强大的矩阵运算和图形用户界面(GUI)功能。以下是对谱聚类及其...

    基于图的聚类方法,利用谱聚类

    ### 基于图的聚类方法:利用谱聚类 #### 一、谱聚类原理与背景 谱聚类是一种基于图论的聚类算法,它通过将原始数据映射到一个低维空间(通常是由图形拉普拉斯矩阵的特征向量构成的空间),在该空间中对数据进行...

    matlab实现自适应谱聚类代码

    在本项目中,我们主要关注的是使用MATLAB实现自适应谱聚类算法。谱聚类是一种数据挖掘技术,常用于无监督学习中的分类任务,它通过寻找数据集的最优分割来实现聚类。自适应谱聚类则进一步优化了谱聚类方法,能够根据...

    【图像分割】基于谱聚类算法实现图像分割matlab源码.md

    【图像分割】基于谱聚类算法实现图像分割matlab源码.md

    谱聚类和SVM相结合的图像分割程序

    谱聚类(Spectral Clustering)与支持向量机(Support Vector Machine,SVM)是两种在机器学习和计算机视觉领域广泛应用的算法。在图像分割任务中,它们各自发挥着独特的作用,而将两者结合使用可以提升图像处理的...

    谱聚类算法.zip

    谱聚类是一种无监督学习方法,常用于数据的聚类分析。它基于图论的概念,通过构建数据点之间的相似性图谱,然后寻找能够最大化类内连接度和最小化类间连接度的分割方式。这种方法在处理大规模、高维度数据时具有一定...

Global site tag (gtag.js) - Google Analytics