Content html
10. Dimensionality Reduction算法
10.1 Motivationapp
10.1.1 Motivation one: Data Compression机器学习
10.2.2 Motivation two: Visualization函数
10.2 Principal Component Analysis学习
10.2.1 Problem formulation测试
10.2.2 Principal Component Analysis Algorithmspa
10.2.3 Choosing the Number of Principal Components3d
10.2.4 Advice for Applying PCA orm
若是咱们有许多冗余的数据,咱们可能须要对特征量进行降维(Dimensionality Reduction)。
咱们能够找到两个很是相关的特征量,可视化,而后用一条新的直线来准确的描述这两个特征量。例如图10-1所示,x1和x2是两个单位不一样本质相同的特征量,咱们能够对其降维。
图10-1 一个2维到1维的例子
又如图10-2所示的3维到2维的例子,经过对x1,x2,x3的可视化,发现虽然样本处于3维空间,可是他们大多数都分布在同一个平面中,因此咱们能够经过投影,将3维降为2维。
图10-2 一个3维到2维的例子
降维的好处很明显,它不只能够数据减小对内存的占用,并且还能够加快学习算法的执行。
注意,降维只是减少特征量的个数(即n)而不是减少训练集的个数(即m)。
咱们能够知道,但特征量维数大于3时,咱们几乎不能对数据进行可视化。因此,有时为了对数据进行可视化,咱们须要对其进行降维。咱们能够找到2个或3个具备表明性的特征量,他们(大体)能够归纳其余的特征量。
例如,描述一个国家有不少特征量,好比GDP,人均GDP,人均寿命,平均家庭收入等等。想要研究国家的经济状况并进行可视化,咱们能够选出两个具备表明性的特征量如GDP和人均GDP,而后对数据进行可视化。如图10-3所示。
图10-3 一个可视化的例子
主成分分析(Principal Component Analysis : PCA)是最经常使用的降维算法。
首先咱们思考以下问题,对于正交属性空间(对2维空间即为直角坐标系)中的样本点,如何用一个超平面(直线/平面的高维推广)对全部样本进行恰当的表达?
事实上,若存在这样的超平面,那么它大概应具备这样的性质:
下面咱们以3维降到2维为例,来试着理解为何须要这两种性质。图10-4给出了样本在3维空间的分布状况,其中图(2)是图(1)旋转调整后的结果。在10.1节咱们默认以红色线所画平面(不妨称之为平面s1)为2维平面进行投影(降维),投影结果为图10-5的(1)所示,这样彷佛还不错。那为何不用蓝色线所画平面(不妨称之为平面s2)进行投影呢? 能够想象,用s2投影的结果将如图10-5的(2)所示。
图10-4 样本在3维正交空间的分布
图10-5 样本投影在2维平面后的结果
由图10-4能够很明显的看出,对当前样本而言,s1平面比s2平面的最近重构性要好(样本离平面的距离更近);由图10-5能够很明显的看出,对当前样本而言,s1平面比s2平面的最大可分性要好(样本点更分散)。不难理解,若是选择s2平面进行投影降维,咱们会丢失更多(至关多)的特征量信息,由于它的投影结果甚至能够在转化为1维。而在s1平面上的投影包含更多的信息(丢失的更少)。
这样是否就是说咱们从3维降到1维必定会丢失至关多的信息呢? 其实也不必定,试想,若是平面s1投影结果和平面s2的相似,那么咱们能够推断这3个特征量本质上的含义大体相同。因此即便直接从3维到1维也不会丢失较多的信息。这里也反映了咱们须要知道如何选择到底降到几维会比较好(在10.2.3节中讨论)。
让咱们高兴的是,上面的例子也说明了最近重构性和最大可分性能够同时知足。更让人兴奋的是,分别以最近重构性和最大可分性为目标,可以获得PCA的两种等价推导。
通常的,将特征量从n维降到k维:
注意: PCA和线性回归是不一样的,如图10-6所示,线性回归是以平方偏差和(SSE)最小为目标,参见1.2.4节;而PCA是使投影(二维即垂直)距离最小;PCA与标记或者预测值彻底无关,而线性回归是为了预测y的值。
图10-6 PCA不是线性回归
分别基于上述两种目标的具体推导过程参见周志华老师的《机器学习》P230。从方差的角度推导参见李宏毅老师《机器学习》课程Unsupervised Learning: Principle Component Analysis。
两种等价的推导结论是:对协方差矩阵进行特征值分解,将求得的特征值进行降序排序,再取前k个特征值对应的特征向量构成
。
其中
基于上一节给出的结论,下面给出PCA算法。
输入:训练集:,低维空间维数k
过程:
(其中
是n*1的向量)
在matlab中具体实现以下,其中X为m*n的矩阵:
Sigma = (1/m) * X'* X;
在实践中一般对协方差矩阵进行奇异值分解代替特征值分解。在matlab中实现以下:
[U, S, V] = svd(Sigma); (svd即为matlab中奇异值分解的内置函数)
在matlab具体实现时,Ureduce = 认为是第3步求得的U的前k个,即有:Ureduce = U( : , 1:k); 其中Ureduce为n*k的矩阵
通过了上述4步获得了投影矩阵Ureduce,利用Ureduce就能够获得投影后的样本值
(
为k*1的向量)
下面总结在matlab中实现PCA的所有算法(假设数据已被中心化)
Sigma = (1/m) * X' * X; % compute the covariance matrix
[U,S,V] = svd(Sigma); % compute our projected directions
Ureduce = U(:,1:k); % take the first k directions
Z = Ureduce' * X; % compute the projected data points
如何选择k(又称为主成分的个数)的值?
首先,试想咱们可使用PCA来压缩数据,咱们应该如何解压?或者说如何回到本来的样本值?事实上咱们能够利用下列等式计算出原始数据的近似值Xapprox:
Xapprox = Z * Ureduce (m*n = m*k * k*n )
天然的,还原的数据Xapprox越接近原始数据X说明PCA偏差越小,基于这点,下面给出选择k的一种方法:
结合PCA算法,选择K的算法总结以下:
这个算法效率特别低。在实际应用中,咱们只需利用svd()函数,以下:
参考:《机器学习》 周志华