这是一个很有意思的问题。PCA(主成分分析)是降维方法,K-means(K均值)是聚类方法,似乎风牛马不相及。但是,果真如此吗?它们是否有内在的联系呢?
发现有用PCA聚类,可是PCA不应该是降维的方法么?
我不知道你具体发现的是哪篇用PCA聚类的论文,不过我猜你看到的可能是这篇:
Ding He. 2004. K-means Clustering via Principal Component Analysis. ranger.uta.edu/~chqding/papers/KmeansPCA1.pdf
这篇论文的主要内容是从形式上准确地描述PCA和K-means的内在联系,因此使用了大量数学公式和推导。我不打算在这里重复推导过程,感兴趣的可以直接阅读上面给出的论文。我将尝试从直观的角度形象地说明两者的联系。
首先,我们简单温习下PCA和K-means。
PCA假定我们有一些数据点,PCA的目标是找到一条线,让这条线上的点能够最大程度上“代表”原本的数据点。
那么,关键在于,我们将依据什么标准寻找这条线?PCA的标准有两条(这两条实际上是等价的):
这条线上的点差异越大越好(从数学上来说,方差较大)。否则线上的点全部挤在一起,代表性显然不好。基于这条线上的点,重建原数据点的误差最小。我们可以用下面的动图演示这一点:
(图片来源:CrossValidated)
上图中,红点是PCA降维后的数据点,红线为重建误差。我们可以看到,当直线对准两端的粉线时,红线的总长度最小。
那么,数学上我们如何表示红线的总长度呢?
显然,直接加起来是不行的,因为正负误差会互相抵消。
所以,很自然的,我们就想到,取绝对值或者平方后再相加,然后取平均数(方便应付新增数据点的情况)。
那么,到底是取绝对值还是取平方呢?高斯-马尔可夫定理(Gauss-Markov Theorem)提示我们,取平方比较好。
所以,概括一下,PCA需要最小化重建的均方误差(mean-squared error)。
K-meansK-means聚类,是给定一些数据点,将其分组。分组的依据是和中心点的距离。
(图片来源:CrossValidated)
如果说PCA是要找一条直线的话,那么K-means就需要找中心点。中心点怎么找?最小化其他数据点和中心点的距离总和。
这个距离总和如何衡量?使用均方误差(mean-squared error),所以这一聚类方法称为K-means.
PCA和K-means的内在联系从这里我们可以看到,PCA是要找一些点(这些点在一条线上),这些点的特征可以最好地代表原数据点。而K-means是要找一些中心点,这些中心点可以最好地代表所属聚类中的点。而判定最好的标准,都是最小化均方误差,所以,从直觉上说,两者具有内在联系。
(图片来源:Machine Learning Refined)
利用这一内在联系,我们可以先通过PCA计算出聚类均值(具体计算方法见Ding He的论文),然后迭代该均值,直到收敛(收敛意味着聚类完成)。
(图片来源:论文)
思考我们前面提到了高斯-马尔可夫定理。熟悉机器学习的读者可能在学习线性回归的时候接触过这个定理。那么,不知道读者是否好奇,线性回归和PCA、K-means有没有什么联系?更进一步,线性回归(回归方法)、PCA(降维方法)、K-means(聚类方法)和稀疏编码(编码方法)有没有什么联系?欢迎留言告诉我你的想法。