【机器学习】K-Means 聚类是特殊的矩阵分解问题

【机器学习】K-Means 聚类是特殊的矩阵分解(Matrix Factorization)问题


原文是:《k-Means Clustering Is Matrix Factorization》

本博客是该论文的阅读笔记,不免有很多细节不对之处。

还望各位看官能够见谅,欢迎批评指正。

更多相关博客请猛戳:http://blog.csdn.net/cyh_24

如需转载,请附上本文链接:http://blog.csdn.net/cyh_24/article/details/50408884

论文证明了传统的K-Means算法的目标函数可以被表达成数据矩阵与其低阶数据矩阵之间差异的Frobenius范数。

简要的说,K-Means 聚类其实是一种矩阵分解问题。

K-Means的推导,我想大家都已经很清楚了,这里不细说。它的目标函数,可以定义如下:

∑i=1k∑j=1nzij||xj?μi||2

如果能够把目标函数表达成如下形式,那么也就证明了K-Means聚类是特殊的矩阵分解问题。

?=||X?MZ||2

?=||X?XZT(ZZT)?1Z||2

先不用深究,下文会详细介绍,先注意几个变量的意义:

数据集 X∈Rm?n 是向量 xi∈Rm 的矩阵;

M∈Rm?k,是类中心点 μi∈Rm 的矩阵;

Z∈Rk?n,是二值指示变量zij的矩阵;若xj∈Ci,则zij=1,否则 zij=0;

数学符号说明

  1. xi 表示矩阵 X 的第 j-th列向量(好像与平常的相反了);
  2. X的第(l,j)的元素可以写成xlj或者(X)lj ;
  3. ||x|| 表示欧式距离,
  4. ||X|| 则表示矩阵的 Frobenius 范数
  5. 其Frobenius 范数平方形式定义如下:

    ||X||2=∑l,jx2lj=∑j||xj||2=∑jxTjxj=∑j(XTX)jj=tr[XTX]

推导过程

假设,数据集X 可以分成 k 个类 C1,...Ck, 分别对应的类中心点是 μ1,...μk;

zij 是二值指示变量:若xj∈Ci,则zij=1,否则 zij=0;

那么,显然可以得到:

∑izij=1

而每行总和刚好是这个类中的样本个数:

∑jzij=ni=|Ci|

由于zji∈{0,1},所以Z的每一列只有一个1,所以:

zij?zi′j=1(i=i′)or0(otherwise)

因此,ZZT 是一个对角矩阵,并且:

(ZZT)ii′=∑j(Z)ij(ZT)ji′=∑jzijzi′j

=ni,ifi=i′

=0,otherwise

Step 1: 将目标函数左边展开

Step 2: 将目标函数中间项展开

接下来,我们看目标函数的中间项。作为矩阵Frobenius范数的平方,它可以按如下方式写:

从之前的结论中,我们可以快速发现:T1=T4andT2=T5. 所以,只要T3=T6,那么我们假设的目标函数的第一个等式就成立了。所以,现在的目标就是证明 T3=T6.

来看一下T6,可以得到:

tr[ZTMTMZ]=tr[MTMZZT]

=∑i(MTMZZT)ii

=∑i∑l(MTM)il(ZZT)li

=∑i(MTM)ii(ZZT)ii

=∑i||μi||2ni

在上面的推导中,我们用到了 ZZT 是对角阵的特性。到此,T3=T6证明完毕,因此,目标函数的第一个等式也就证明完毕了。

Step 3: 消除矩阵 M

现在的任务就是证明第二个等式。

回顾一下我们的目的,就是讲目标函数最小化, 因为已经证明了第一个等式,所以,其实也就是让||X?MZ||2 最小化:

δδM||X?MZ||2

=δδM[tr[XTX]?2tr[XTMZ]+tr[ZTMTMZ]]

=2(MZZT?XZT)

令偏导等于0,可以得到:

M=XZT(ZZT)?1

代入目标函数第二个等式,就证明完毕了。

结论

我们在上面用了一大堆令人眩晕的代数表达式,终于说明了K-Means聚类问题可以被理解成是如下的受约束的矩阵分解问题:

目标函数∑i=1k∑j=1nzij||xj?μi||2等价于minZ||X?XZT(ZZT)Z||2

s.t.zij∈{0,1}

∑jzij=1

时间: 2024-10-23 12:05:43

【机器学习】K-Means 聚类是特殊的矩阵分解问题的相关文章

机器学习--k均值聚类(k-means)算法

一.基本原理 分类是指分类器根据已标注类别的训练集,通过训练可以对未知类别的样本进行分类.分类被称为监督学习.如果训练集的样本没有标注类别,那么就需要用到聚类.聚类是把相似的样本聚成一类,这种相似性通常以距离来度量.聚类被称为无监督学习. 聚类是指根据"物以类聚"的原理,将本身没有类别的样本聚集成不同的组,这样的一组数据对象的集合叫做簇,并且对每一个这样的簇进行描述的过程.它的目的是使得属于同一个簇的样本之间应该彼此相似,而不同簇的样本应该足够不相似.与分类规则不同,进行聚类前并不知道

k means聚类过程

k-means是一种非监督 (从下图0 当中我们可以看到训练数据并没有标签标注类别)的聚类算法 0.initial 1.select centroids randomly 2.assign points 3.update centroids 4.reassign points 5.update centroids 6.reassign points 7.iteration reference: https://www.naftaliharris.com/blog/visualizing-k-me

吴裕雄 python 机器学习——K均值聚类KMeans模型

import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics import adjusted_rand_score from sklearn.datasets.samples_generator import make_blobs def create_data(centers,num=100,std=0.7): X, labels_true = make_b

推荐系统之矩阵分解(MF)

一.矩阵分解 1.案例 我们都熟知在一些软件中常常有评分系统,但并不是所有的用户user人都会对项目item进行评分,因此评分系统所收集到的用户评分信息必然是不完整的矩阵.那如何跟据这个不完整矩阵中已有的评分来预测未知评分呢.使用矩阵分解的思想很好地解决了这一问题. 假如我们现在有一个用户-项目的评分矩阵R(n,m)是n行m列的矩阵,n表示user个数,m行表示item的个数 那么,如何根据目前的矩阵R(5,4)如何对未打分的商品进行评分的预测(如何得到分值为0的用户的打分值)? --矩阵分解的

用Spark学习矩阵分解推荐算法

在矩阵分解在协同过滤推荐算法中的应用中,我们对矩阵分解在推荐算法中的应用原理做了总结,这里我们就从实践的角度来用Spark学习矩阵分解推荐算法. 1. Spark推荐算法概述 在Spark MLlib中,推荐算法这块只实现了基于矩阵分解的协同过滤推荐算法.而基于的算法是FunkSVD算法,即将m个用户和n个物品对应的评分矩阵M分解为两个低维的矩阵:$$M_{m \times n}=P_{m \times k}^TQ_{k \times n}$$ 其中k为分解成低维的维数,一般远比m和n小.如果大

机器学习实战笔记-利用K均值聚类算法对未标注数据分组

聚类是一种无监督的学习,它将相似的对象归到同一个簇中.它有点像全自动分类.聚类方法几乎可以应用于所有对象,簇内的对象越相似,聚类的效果越好 簇识别给出聚类结果的含义.假定有一些数据,现在将相似数据归到一起,簇识别会告诉我们这些簇到底都是些什么.聚类与分类的最大不同在于,分类的目标事先巳知,而聚类则不一样.因为其产生的结果与分类相同,而只是类别没有预先定义,聚类有时也被称为无监督分类(unsupervised classification ). 聚类分析试图将相似对象归人同一簇,将不相似对象归到不

机器学习实战5:k-means聚类:二分k均值聚类+地理位置聚簇实例

k-均值聚类是非监督学习的一种,输入必须指定聚簇中心个数k.k均值是基于相似度的聚类,为没有标签的一簇实例分为一类. 一 经典的k-均值聚类 思路: 1 随机创建k个质心(k必须指定,二维的很容易确定,可视化数据分布,直观确定即可): 2 遍历数据集的每个实例,计算其到每个质心的相似度,这里也就是欧氏距离:把每个实例都分配到距离最近的质心的那一类,用一个二维数组数据结构保存,第一列是最近质心序号,第二列是距离: 3 根据二维数组保存的数据,重新计算每个聚簇新的质心: 4 迭代2 和 3,直到收敛

机器学习之路:python k均值聚类 KMeans 手写数字

python3 学习使用api 使用了网上的数据集,我把他下载到了本地 可以到我的git中下载数据集: https://github.com/linyi0604/MachineLearning 代码: 1 import numpy as np 2 import pandas as pd 3 from sklearn.cluster import KMeans 4 from sklearn import metrics 5 6 ''' 7 k均值算法: 8 1 随机选择k个样本作为k个类别的中心

[机器学习][K-Means] 无监督学习之K均值聚类

有监督学习虽然高效.应用范围广,但最大的问题就是需要大量的有标签的数据集,但现实生活中我们遇到的大量数据都是没有明确标签的,而且对于庞大的数据集进行标注工作本身也是一项费时费力的工作模式,所以我们希望找到一种方法能自动的挖掘数据集中各变量的关系,然后"总结"出一些规律和特征进行分类,这样的方法我们成为无监督学习(Unsupervised learning). 在无标签的数据集中进行分类的方法成为聚类.顾名思义,聚类就是依照某种算法将相似的样本聚在一起形成一类,而不管它的标签是什么.在聚