【机器学习算法】PCA主成分分析技术

PCA主成分分析

本文主要参考:

机器学习算法《白板推导》系列视频

1.什么是PCA

PCA(principal components analysis),主成分分析技术,主要用于高维信息的降维操作,即提取能够集中表征数据信息的少数特征。直观上,PCA通过使用一个超平面对数据进行表达,目标是使数据在该超平面上的投影方差最大,重构数据时需要更小的距离。下面引用白板推导里提出的“一个中心两个基本点”说明PCA技术的目标。

2.PCA目标

“一个中心”:对原始空间进行重构
我们首先假设原始的高维数据各个维度之间是线性相关的,即原始数据维度之间存在信息冗余。例如:记录学生信息时,可能记录学生的姓名、性别、学号、年龄等信息,如果对这些数据进行处理时,对于某些任务,姓名数据和学号数据其实就是冗余信息。因此我们希望通过PCA技术将这些存在信息荣誉的线性相关数据转化为线性无关的数据,即提取数据的主成分。

“两个基本点”:最大投影方差和最小重构距离
我们从二维数据举例开始介绍两个基本点的概念。假设二维数据在xy坐标分布如下图。如果我们利用u1方向的坐标轴对数据进行降维操作,即将数据投影到u1方向上。那么数据会在u1上分布得比较分散,即数据能够达到最大投影方差。如果利用u2对数据进行降维,则数据点投影到u2方向上会比较集中,甚至出现数据点重合在一个点的情况。直观上,降维后的数据在坐标轴上分布分散,提取的特征更具有区分性。最小重构距离的概念是将降维后的数据恢复到原来数据需要移动的距离。如果我们将数据利用u2方向坐标轴进行降维,进行数据重构时需要移动更大的距离。因此,其实最大投影方差和最小重构距离是等价的。
【机器学习算法】PCA主成分分析技术

3.从最小投影方差角度理解PCA实现

首先,我们从一维向量向一个单位向量投影出发:
【机器学习算法】PCA主成分分析技术

假设我们需要计算向量a在单位向量b上的投影:
projection=acosθprojection=|\vec{a}|cos \theta
又因为两向量点乘:
ab=abcosθ=acosθ\vec{a} \cdot \vec{b} = |\vec{a}||\vec{b}|cos \theta=|\vec{a}|cos \theta
回到数据角度。假设我们的数据Data为
X=(x1,x2,...,xN)TxiRPX=(x_1, x_2,...,x_N)^T \qquad x_i\in R^P
首先将数据进行中心化(每个维度减去该维度均值),即将数据中心平移到坐标原点处:
(xixˉ)(x_i - \bar{x})
假设PCA的目标投影方向是u1,则中心化后的数据在目标方向的投影为(矩阵相乘的形式):
(xixˉ)Tu1(x_i - \bar{x})^T u_1
由于数据已经进行中心化,所以起投影的均值为0,方差为:
J=1Ni=1N((xixˉ)Tu1)2s.t.u1Tu1=1 J=\frac{1}{N} \sum_{i=1}^N{((x_i - \bar{x})^T u_1)^2} \qquad s.t.\quad u_1^Tu_1=1
将上式进行以下化简:
J=u1T(i=1N1N(xixˉ)(xixˉ)T)u1=u1TSu1 J=u_1^T(\sum_{i=1}^N{\frac{1}{N}(x_i - \bar{x})(x_i - \bar{x})^T})u_1 = u1^TSu_1
其中S=i=1N1N(xixˉ)(xixˉ)T=1NXTHXS=\sum_{i=1}^N{\frac{1}{N}(x_i - \bar{x})(x_i - \bar{x})^T}=\frac{1}{N}X^THX,H为中心矩阵,用于数据中心化。
那么最大化投影方差转化为以下优化问题:
{u1^=argminu1TSu1s.t.u1Tu1=1 \begin{cases} \hat{u_1} = \mathop{\arg\min}u1^TSu_1\\ s.t.\quad u_1^Tu_1=1 \end{cases}
由拉格朗日乘子法求解,拉格朗日函数为:
L(u1,λ)=u1TSu1+λ(1u1Tu1) L(u_1, \lambda)=u_1^TSu_1+\lambda(1-u_1^Tu_1)
L对u1求导:
Lu1=2Su1λ2u1=0 \frac{\partial L}{\partial u_1}=2Su_1-\lambda2u_1=0
则:
Su1=λu1 Su_1 = \lambda u_1
所以λ\lambda为S的特征值,u1u_1为S的特征向量。如果需要将数据降维到Q维,则取S矩阵的前Q个最大的特征值对应的特征向量作为降维后的数据。

至此,PCA技术介绍完毕,作为比较有效的降维技术,PCA经常用在训练SVM分类器前对数据进行降维,不仅可以将高维数据中的冗余信息去除,也能提高算法的计算效率。

本文仅作为学习笔记交流分享用。由于本人水平有限,文章可能出现纰漏,欢迎大家进行交流指正。谢谢阅读!