标签(空格分隔): 机器学习 聚类
机器学习第二弹,谱聚类的实现。聚类是一种非常重要的工作,解决这个问题传统的方法有EM等生成式算法或者K-means之类的传统聚类方法,生成式算法首先需要做一些比较强的假设,比如每一个簇满足高斯分布,而且容易陷入局部最小值,从而需要多次进行运算,从而得到最优解。
要进行谱聚类,首先要构造数据的相似度矩阵。谱聚类把一个传统的聚类的游动过程灵活地转变成了一个图划分问题。首先讲一下谱聚类的算法流程:
1)计算数据集的相似矩阵 W ; 2)计算度矩阵D, D 是一个对角矩阵,Dii等于相似矩阵 W 的第i行元素之和; 3)计算拉普拉斯矩阵L=D−W; 4)按照Rayleigh-Ritz原理,计算拉普拉斯矩阵的最小的 K 个特征值(除0这个特征值外),把这K个特征值从小到大排列,再计算对应的特征向量。把这个 K 个特征向量按照特征值出现的顺序排列,形成一个Rn∗k的矩阵。 5)在第四步得到的矩阵上运行K-means算法,把每一行对应的点分配到对应的簇中。第四部的每一行即对应原始数据中的一个数据点。
下面讲解这个算法的运行原理,怎样把一个图划分问题转化为一个拉普拉斯矩阵的特征向量聚类过程。首先要构造一个有权无向图,怎么来定义权呢。传统的欧几里得距离如果两者的距离越远,那么相似度其实应该更低。这儿我们可以使用高斯相似度来转换,即传统的RBF kernel.距离越远,相似度越低,反之,距离越近,相似度越高。现在我们想要把这个连通图划分为几个连图子图,选择切哪些边呢?当然是权重比较小的边。定义点 i 和点j之间的权重为 Wij 。
W(A,B)=∑i∈A,j∈BW(i,j)(0) cut(A1...Ak)=1/2∑i=1kW(A,A¯¯¯)(1) W(A1...Ak)=∑i=1kcut(A,A¯¯¯)(2)
即把图划分为几个连通子图的最优方案,即为求解以上第三个式子的最小值。又因为 L=D−W 。 定义向量 f=(f1,f2...fn) 。
fi=|A¯¯¯|/|A|−−−−−−√ if i∈A(3) fi=−|A|/|A¯¯¯|−−−−−−√ if i∉A(4) 可以得到以下等式: f′Lf=f′Df−f′Wf(5) =∑i=1ndif2i−1/2∑i∈A,j∈BfiWijfj−1/2∑i∈B,j∈AfiWijfj(6) =1/2∑i,j=1nWi,j(fi−fj)2(7) =1/2∑i,j=1nWi,j(|A¯¯¯|/|A|−−−−−−√+|A|/|A¯¯¯|−−−−−−√)2(8) =|V|1/2∑i,j=1nWi,j(1/|A|+1/|A¯¯¯|)(9) =|V|RatioCut(10)其中 f 满足||f||=n√
RatioCut=1/2∑i=1kW(A,A¯¯¯)/|A|(11)所以要最小化RatioCut等价于最小化 f′Lf 。此时由于f的取值是离散的,这仍然是一个NP难问题,所以把f的范围进行扩大,使得f可以取实数集上的任意值。此时根据Rayleigh-Ritz原理,很容易就知道在分成两类的情况下,f的解即为第二小的特征值对应的特征向量。得到特征向量后根据向量值是否大于0,判断其对应的类。对于分成多类的情况,使用算法步骤中的第四步和第五步即可。