什么是降维
一般来说,在ml里面,需要feature。而对于feature,我们又通常使用向量来表示。所以,简单地说,降维就是将一个高维的向量映射为一个低维的向量。形象地说,降维可以看作一个函数,输入是一个D为的向量,输出是一个M维的向量。
那怎么样才算是一个好的降维结果呢?直观地说,就是要既能降低维度,又能使得损失的信息尽量少。举个例子,如果现在有淘宝店铺的特征,有非常多维,我们想降维,那要怎么做呢?假设特征中有两维特征是“浏览量”和“访客数”,其实这两者之间应该是具有强相关性的,直觉上删除其中一个并不会造成多大的信息损失。以上就是一个朴素的降维思想。而按照机器学习的方法,我们需要定义一个目标函数,并进行最优化。而不同的优化目标也就导致了不同的降维算法。
首先,来看看最直接的损失函数,reconstuction error:
其中 xi~ 是 xi 降维后得到的低维向量再次“升维”而还原出来的高维向量。上面的式子无脑符合“既能降低维度,又能使得损失的信息尽量少”这句话。虽然这种损失函数很直接,但缺点是不仅要想出降维的方法还要有还原的方法。
另一种损失函数是variance:
这里variance的意思是“使得特征具有最好的区分能力”,在式子中的表现就是方差了。
好了,下面开始从一个个具体的降维算法入手,讲述其中的一些数学原理。
PCA
PCA作为学术界和工业界都最为常见的一个降维算法,肯定是排第一个啦。
在真正讲PCA之前,先明确一下协方差和协方差矩阵。协方差
是为了检测x和y两个变量之间的相关性,为正表明正相关,且越大说明越正相关;反之则是负相关。单单协方差只能衡量两个变量,也就是说只能处理特征只有二维的情况。如果特征有多维,那么就是协方差矩阵出场的时候了:
对角线上是方差,而其他位置是协方差。另外,我们有以下推导: