@frank-shaw
2015-08-03T18:39:56.000000Z
字数 17566
阅读 8130
机器学习
在我们正式讲解聚类算法之前,让我们来简单总结一下我们已有的距离计算方法。聚类,无法避免的就是需要计算距离,而不同计算距离方法的选择,则有可能导致差异较大的不同结果。
闵可夫斯基Minkowski距离:
杰卡德相似系数(Jaccard):
在我们熟悉的机器学习算法和模型中,大部分情况下训练数据都是带有label(标签)的,这样的算法是有监督学习算法。当训练数据没有label(标签)时,便称之为无监督学习。聚类算法就是无监督学习中最常见的一种,给定一组数据,需要聚类算法去挖掘数据中的隐含信息。聚类算法的应用很广:顾客行为聚类,google新闻聚类等。
定义:给定一个有
基本思想:对给定的
K-means算法,也被称为K-均值,是一种得到最广泛使用的聚类算法,它也可以成为其他聚类算法的基础。
基本思想: K-means算法首先随机地选择
算法流程:
设给定输入数据为
S=x(1),x(2)...,x(m) ,K-means算法如下:
(1)选取初始的k 个聚类中心μ1,μ2...μk∈Rn ;
(2)对每个样本数据而言,将其类别标签设为距离其最近的聚类中心的标签,即label(i)=argminj=||x(i)−μj|| ;
(3)将每个聚类中心的值更新为与该类别中心相同类别的所有样本的平均值,即
μj:=∑mi=11{label(i)=j}x(i)∑mi=11{label(i)=j}
(4)重复(2)(3)步,直到聚类中心的变化(Δμj )小于规定的阈值为止。
下图即为一个简单的示例(
在K-means算法中,如何选择初始的聚类中心是一个普遍的问题(该算法是初值敏感的)。同时,K-means算法只能够保证收敛到一个局部极值,无法保证收敛到全局最优。一个较为简单的解决办法是随机初始化多次,以最优的聚类结果为最终结果。
在聚类结束后,如果一个中心没有得到任何样本(这是可能的),那么需要去除这个中心点,或者重新初始化。
密度聚类方法的指导思想是:只要一个区域中的点的密度大于某个阈值,就把它加到与之相近的类簇中去。这类算法可以克服基于距离的算法只能够发现“类圆形”(凸)的聚类的缺点,可以发现任何形状的聚类,且对噪声数据不敏感。但是计算密度单元的计算复杂度大,需要建立空间索引来降低计算量。
两个主要的密度聚类方法:DBSCAN算法、密度最大值算法。
DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇,并在具有噪声的空间数据库中发现任意形状的簇,它将簇定义为密度相连的点的最大集合。
可以想象一下人类聚居的过程,黄河(母亲河)边上首先会聚集更多的人,当人数足够多了之后,就会产生城市(类似于簇的概念)。可以想象一下城市的形状是不规则的,但城市是以空间上的人口密度作为划分基础的。
算法设计的基本定义:
1.对象的
2.核心对象(core point):对于给定的数目m(人为设定的标准),如果一个对象的
3.直接密度可达(directly density-reachable):给定一个对象集合
Tips:以下图片帮助理解:如图
ϵ =1cm,m=5,可以知道q 是一个核心对象,从对象q 出发到对象p 出发是直接密度可达的。
4.密度可达(density-reachable):如果存在一个对象链
5.密度相连(density-connected):如果对象集合
6.簇(cluster):一个基于密度的簇是最大的密度相连对象的集合。
7.噪声:不包含在任何簇中的对象我们称之为噪声。
Tips:以下图片帮助理解:如图m=3,红色部分的点都是核心对象,同样的,他们彼此之间是密度可达的。点B和点C不是核心对象,但是它们关于点A是密度可达的,于是它们属于同一个簇。点N是噪声点。
通过以上定义,我们可以知道这些定义是一层层递进的,慢慢理解下来其实不难。我们也可以发现密度可达并不是双向关系的,而密度相连则是双向关系的。
现在假设点
DBSCAN算法流程
DBSCAN需要两个参数:
不断重复以上过程,就可以将原始数据区分为多个簇以及噪声点。
伪代码如下:
DBSCAN(D, eps, MinPts) {
C = 0
for each point P in dataset D {
if P is visited
continue next point
mark P as visited
NeighborPts = regionQuery(P, eps)
if sizeof(NeighborPts) < MinPts
mark P as NOISE
else {
C = next cluster
expandCluster(P, NeighborPts, C, eps, MinPts)
}
}
}
expandCluster(P, NeighborPts, C, eps, MinPts) {
add P to cluster C
for each point P' in NeighborPts {
if P' is not visited {
mark P' as visited
NeighborPts' = regionQuery(P', eps)
if sizeof(NeighborPts') >= MinPts
NeighborPts = NeighborPts joined with NeighborPts'
}
if P' is not yet member of any cluster
add P' to cluster C
}
}
regionQuery(P, eps)
return all points within P's eps-neighborhood (including P)
让我们来看看某一个实际的聚类效果图:
密度最大值聚类是一种简洁优美的聚类算法,可以识别各种形状的类簇,并且参数很容易确定。这是2014年最新的论文,大家可以点击此处看看论文。
首先,让我们给出以下定义:
局部密度
高局部密度点距离
簇中心的识别:
那些有着比较大的局部密度
下面的图可以给我们清晰演示簇中心与异常点的识别。左图为点的分布,右图横坐标为
从右图可以识别出:点1、10都是簇中心,而点28、27、26都是异常点,再反过来看左图,确实如此!
簇中心找到后,剩余的每个点就会被划分到比该点具有更高密度的最近邻居点所属簇当中去,当然,如果该点的最近邻居点还未找到所属簇,那么就会以最近邻居点作为新的起始点,寻找具有更高密度的最近邻居点所属簇。这个过程就相当于:
现在有五个党派(簇中心),国内的每个人都要表明自己是哪个党派的,但是公民A并不清楚他应该属于哪个党派,于是他就去问他的大哥B(比A具有更高密度的最近邻居点),A觉得我大哥B属于哪个党派我就属于哪个党派吧;但是有可能公民B也不知道自己应该属于哪个党派呀,B就回去问他的大哥C,跟随C所属的党派。以此类推下去,所有人都会找到自己的党派(簇中心)。
可靠性分析:对边界和噪声的认识
在聚类分析中,通常需要确定每个点划分给某个簇的可靠性。在该算法中,可以首先为每个簇定义一个边界区域(border region),即划分给该簇但是距离其他簇的点的距离小于
该簇中所有局部密度大于
举例分析:下图中A图为生成数据的概率分布,B,C二图为分别从该分部中生成4000,1000个点。D,E分别是B,C两组数据的决策图(decision tree),可以看到两组数据都只有五个点有较大的
谱聚类算法涉及到较多的矩阵分析中的知识,在正式介绍算法之前,容我简单介绍两个知识点:
1. 实对称矩阵的特征值是实数;
2. 实对称矩阵的不同对称值对应的特征向量是正交的;
看到这两个都是关于实对称矩阵的知识点,我们头脑中的某些知识点就要翻出来了。那么我们来正式介绍谱和谱聚类吧~
谱:方阵作为线性算子,它的所有特征值统称为方阵的谱。
谱半径:方阵的谱半径即为最大的特征值;矩阵A(非方阵)的谱半径:(A
谱聚类:它是一种基于图论的聚类方法,通过对样本数据的拉普拉斯矩阵(具体含义稍后解释)的特征向量进行聚类,从而达到对样本数据聚类的目的。
相似度图(similarity graph):给定一组数据
此时,聚类问题可以转化为相似度图来表示:划分的原则是:组间的边的权重最小化(意味着组间的数据相似度要尽可能低),组内的边的权重最大化(意味着组内的数据相似度尽可能高)。下图即为一个图模型聚类的示例:
在上图中,一共六个定点,定点之间的连线上的数值表示两个顶点的相似度。现在要将这六个点划分为2个类,怎么分割?根据谱聚类的思想,应该去掉用虚线表示的那条边,进而分为两类。
邻接权重矩阵:如果
度矩阵:图G中某一个点
子图:图G的子图相当于全集的子集,即图G中的部分点构成的一个新的图。
有多种将给定数据集
k近邻图:在这种图中,以点
全连接图:在这种图中,我们将所有的点都相互连接起来,同时所有的边的权重设置为相似度
让我们看看实际上这几种建立方法的效果如何呢?下图即为三种方法的对比。假设原图中的上半部分为"月牙部分",下半部分为"高斯部分"
互k近邻图:它趋向于连接相同密度的部分,而不连接不同密度的部分。这种性质介于
经验总结:首先尝试使用k近邻图。
非正则化拉普拉斯矩阵定义如下:
证明性质1:
证明性质3:当向量
性质2、4可以很容易得到。
定理:令相似度图G是权值非负的无向图,拉普拉斯矩阵
定理的证明
首先,让我们先来证明
接下来让我们考虑有k个连通分量的情况。不失一般性的前提下,我们假设顶点都是按照连通分量的归属来排序的。这种情况下的权值矩阵
有两个矩阵都被称为正则化拉普拉斯矩阵,两个矩阵的定义是相似的,具体定义如下:
注:对角矩阵的(-1/2)次幂依然是对角矩阵,其对角线元素为原矩阵对角线元素的(-1/2)次幂。
正则化拉普拉斯矩阵满足如下性质:
定理:令相似度图G是权值非负的无向图,拉普拉斯矩阵
在开始介绍算法流程之前,让我们来定义:给定数据集
非正则化谱聚类算法流程:
输入:相似度矩阵S∈Rn×n ,需要聚类的数目k .
- 构建相似度图G(具体方法参考前一部分"相似度图G的建立方法"),令
W 为权重矩阵。- 计算非正则化拉普拉斯矩阵
L 。- 计算矩阵
L 的按照从小到大顺序排列的前k 个特征向量u1,...,uk 。- 将这k个特征向量(列向量)构造成矩阵
U∈Rn×k 。- 对于
i=1,...,n ,将矩阵U 的第i行表示成向量yi∈Rk 。- 在k维空间里,使用k均值聚类算法将n个数据点
yi 聚成k个簇C1,...,Ck 。输出:聚类结果
A1,...,Ak ,其中Ai=j|yj∈Ci 。
正则化谱聚类算法有两种,取决于采用哪一种正则化拉普拉斯矩阵。实际上,正则化谱聚类算法的流程和非正则化谱聚类算法的流程很相似。
正则化谱聚类算法流程(随机游走拉普拉斯矩阵):
输入:相似度矩阵S∈Rn×n ,需要聚类的数目k .
- 构建相似度图G(具体方法参考前一部分"相似度图G的建立方法"),令
W 为权重矩阵。- 计算非正则化拉普拉斯矩阵
L 。- 计算特征值问题
Lu=λDu 的按照从小到大顺序排列的前k 个特征向量u1,...,uk 。- 将这k个特征向量(列向量)构造成矩阵
U∈Rn×k 。- 对于
i=1,...,n ,将矩阵U 的第i行表示成向量yi∈Rk 。- 在k维空间里,使用k均值聚类算法将n个数据点
yi 聚成k个簇C1,...,Ck 。输出:聚类结果
A1,...,Ak ,其中Ai=j|yj∈Ci 。
正则化谱聚类算法流程(对称拉普拉斯矩阵):
输入:相似度矩阵S∈Rn×n ,需要聚类的数目k .
- 构建相似度图G(具体方法参考前一部分"相似度图G的建立方法"),令
W 为权重矩阵。- 计算正则化拉普拉斯矩阵
Lsym 。- 计算矩阵
Lsym 的按照从小到大顺序排列的前k 个特征向量u1,...,uk 。- 将这k个特征向量(列向量)构造成矩阵
U∈Rn×k 。- 将矩阵
U 的每一行都归一化到1,得到矩阵T∈Rn×k ,其中tij=uij/(∑ku2ik)1/2 。- 对于
i=1,...,n ,将矩阵U 的第i行表示成向量yi∈Rk 。- 在k维空间里,使用k均值聚类算法将n个数据点
yi 聚成k个簇C1,...,Ck 。输出:聚类结果
A1,...,Ak ,其中Ai=j|yj∈Ci 。
经验:首选游走拉普拉斯矩阵对应的谱聚类算法。
通过对比三种算法的具体过程,我们发现它们是非常相似的,只不过拉普拉斯矩阵不同从而导致了一丝不同而已。谱聚类算法的主要trick在于将原始数据
那么为什么呢?算法的原理是什么呢?
聚类的一开始,我们想的是根据数据点的相似性的大小来分成不同的组。进一步,将聚类问题转化为相似度图的划分来表示:划分的原则是:组间的边的权重最小化(意味着组间的数据相似度要尽可能低),组内的边的权重最大化(意味着组内的数据相似度尽可能高)。在这个维度来看,让我们来分析谱聚类问题如何近似为图的切割问题。
给定一个带权重矩阵
在实际操作中,发现上述的目标函数存在问题:在很多情况下,mincut的解,将图分成了1个点和其余
上面只是讲了目标函数的修正,那么具体如何求解这个最值问题呢?我们重点分析RatioCut的解法,实际上RatioCut最终推导得到的最优解即为非正则化谱聚类算法的计算结果。而有兴趣的朋友可以去研究一下Ncut最终推导得到的最优解,实际上即为正则化谱聚类算法的计算结果。实际上RatioCut与Ncut的推导过程是相似的。
当
向量
为了解决这个困难,我们将目标条件做一个放松relaxation,将
幸运的是,根据Rayleigh-Ritz定理,该目标函数的解即为矩阵
与划分为2个子图的做法相似,我们可以得到与
需要将一个图
和之前的计算过程相似,我们可以得到:
除了从图的切割的角度来去看待谱聚类算法以外,还可以用随机游走、扰动论等理论来解释。
前路漫漫!
参考文献:
Clustering by fast search and find of densitypeak. Alex Rodriguez, Alessandro Laio
A tutorial on spectral clustering,Ulrike von Luxburg, 2007