05-03 主成分分析(PCA)

目录

  • 主成分分析(PCA)
  • 一、维数灾难和降维
  • 二、主成分分析学习目标
  • 三、主成分分析详解
    • 3.1 主成分分析两个条件
    • 3.2 基于最近重构性推导PCA
      • 3.2.1 主成分分析目标函数
      • 3.2.2 主成分分析目标函数优化
    • 3.3 基于最大可分性推导PCA
    • 3.4 核主成分分析(KPCA)
  • 四、主成分分析流程
    • 4.1 输入
    • 4.2 输出
    • 4.3 流程
  • 五、主成分分析优缺点
    • 5.1 优点
    • 5.2 缺点
  • 六、小结

更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/

主成分分析(PCA)

一、维数灾难和降维

在KNN算法中曾讲到,对于高维数据,会出现数据样本稀疏、距离计算困难等问题。但是这种问题并不是仅仅针对KNN算法,只是在KNN算法中这种问题会被放大,而其他的机器学习算法也会因为高维数据对训练模型造成极大的障碍,这种问题一般被称为维数灾难(curse of dimensionality)。

解决维数灾难最常用的方法是降维(dimension reduction),即通过某种数学变换将原始高维特征空间转变为一个低维子空间,在这个子空间中样本密度大幅提高,距离计算也变得更容易。

# 维数灾难和降维图例
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from sklearn.decomposition import PCA
%matplotlib inline
font = FontProperties(fname='/Library/Fonts/Heiti.ttc')

np.random.seed(0)
X = np.empty((100, 2))
X[:, 0] = np.random.uniform(0, 100, size=100)
X[:, 1] = 0.75 * X[:, 0] + 3. + np.random.normal(0, 10, size=100)
pca = PCA(n_components=1)
X_reduction = pca.fit_transform(X)
X_restore = pca.inverse_transform(X_reduction)

plt.scatter(X[:, 0], X[:, 1], color='g', label='原始数据')
plt.scatter(X_restore[:, 0], X_restore[:, 1],
            color='r', label='降维后的数据')
plt.annotate(s='',xytext=(40,60),xy=(65,30),arrowprops=dict(arrowstyle='-',color='b',linewidth=5))
plt.legend(prop=font)
plt.show()

如上图所示,绿点即原始高维空间中的样本点,红点即我们降维后的样本点。由于图中的高维是二维,低维是一维,所以样本在低维空间是一条直线。

接下来我们的目标就是聊一聊如何做到把高维空间样本点映射到低维空间,即各种降维算法。

二、主成分分析学习目标

  1. 维数灾难和降维
  2. 主成分分析两个条件
  3. 基于主成分分析两个条件推导主成分分析
  4. 核主成分分析
  5. 主成分分析优缺点

三、主成分分析详解

主成分分析(principal component analysis,PCA)是最常用的一种降维方法,我们已经利用“维数灾难和降维图例”解释了降维的过程,PCA的降维过程则是尽可能的使用数据最主要的特征来代表数据原有的所有特征。但是有没有同学想过为什么使用PCA降维是上图的红点组成的线而不是蓝线呢?这里就需要说到我们PCA的两个条件了。

3.1 主成分分析两个条件

对于“维数灾难和降维图例”中的红线和蓝线我们可以把它看成一个超平面\(S\),理论上红线和蓝线构成的超平面都可以做到对样本特征的降维,但是一般我们希望这种能够做到降维的超平面满足以下两个条件

  1. 最近重构性:样本点到这个超平面的距离都足够近
  2. 最大可分性:样本点到这个超平面上的投影尽可能分开

基于最近重构性和最大可分性,就可以得到主成分分析的两种等价推导。

3.2 基于最近重构性推导PCA

3.2.1 主成分分析目标函数

我们首先从最近重构性推导PCA,即样本点到这个超平面的距离足够近。

假设\(m\)个\(n\)维数据\((x^{(1)},x^{(2)},\cdots,x^{(m)})\)都已经进行了中心化,即\(\sum_{i=1}^mx^{(i)}=0\);在假设投影变换后得到的新坐标系为\(\{w_1,w_2,\cdots,w_n\}\),其中\(w_i\)是标准正交基向量,即\(||w_i||=1,w_i^Tw_j=0\),其中\(i\neq{j}\)。

如果把数据从\(n\)维降到\(n'\)维,即丢弃新坐标系中的部分坐标,则新的坐标系为\(\{w_1,w_2,\cdots,w_{n'}\}\),则样本点\(x^{(i)}\)在\(n'\)维坐标系中的投影为
\[
z_{i} = (z_{i1},z_{i2},\cdots,z_{id'})^T
\]
其中\(z_{ij}=w_j^Tx_i\),是\(x_i\)在低维坐标系下第\(j\)维的坐标。

如果我们用\(z^{(i)}\)重构\(x^{(i)}\),则可以恢复的原始数据为
\[
\hat{x_i}=\sum_{j=1}^{d'}z_{ij}w_j
\]
现在考虑整个样本集,既可以获得原样本点\(x_i\)到基于投影重构的样本点\(\hat{x_i}\)之间的距离为
\[
\begin{align}
\sum_{i=1}^m{||\hat{x_i}-x_i||}^2 & = \sum_{i=1}^m{||Wz_i-x_i||}^2 \& = \sum_{i=1}^m(Wz_i)^T(Wz_i)-2\sum_{i=1}^m(Wz_i)^Tx_i+\sum_{i=1}^mx_i^Tx_i \& = \sum_{i=1}^mz_i^Tz_i - 2\sum_{i=1}^mz_i^TW^Tx_i+\sum_{i=1}^mx_i^Tx_i \& = \sum_{i=1}^mz_i^Tz_i-2\sum_{i=1}^mz_i^Tz_i+\sum_{i=1}^mx_i^Tx_i \& = -\sum_{i=1}^mz_i^Tz_i + \sum_{i=1}^mx_i^Tx_i \& = -tr(W^T(\sum_{i=1}^mx_ix_i^T)W)+\sum_{i=1}^mx_i^Tx_i \& = -tr(W^TXX^TW)+\sum_{i=1}^mx_i^Tx_i
\end{align}
\]
由于涉及过多矩阵推导,此处不多赘述,看不懂的可以跳过。

其中\(W=(w_1,w_2,\cdots,w_d)\),其中\(\sum_{i=1}^mx_i^Tx_i\)是数据集的协方差矩阵,\(W\)的每一个向量\(w_j\)是标准正交基,而\(\sum_{i=1}^mx_i^Tx_i\)是一个常量,最小化上式等价于
\[
\begin{align}
& \underbrace{min}_W\,-tr(W^TXX^TW) \& s.t.\,W^TW=I
\end{align}
\]

3.2.2 主成分分析目标函数优化

主成分分析目标函数为
\[
\begin{align}
& \underbrace{min}_W\,-tr(W^TXX^TW) \& s.t.\,W^TW=I
\end{align}
\]
最小化该目标函数其实并不难,可以发现最小化目标函数对应的\(W\)由协方差矩阵\(XX^T\)最大的\(n'\)个特征值对应的特征向量组成,利用拉格朗日乘子法可得
\[
J(W)=-tr(W^TXX^TW+\lambda_i(W^TW-I))
\]
对\(W\)求导等于0即可得
\[
\begin{align}
& -XX^TW+\lambda{W}=0 \& XX^TW = \lambda{W}
\end{align}
\]
从上式可以看出,\(W\)是\(XX^T\)的\(n'\)个特征向量组成的矩阵,而\(\lambda\)有若干个特征值组成的矩阵,特征值在对角线上,其余位置为0。当我们将数据集从\(n\)维降到\(n'\)维时,需要找到最大的\(n'\)个特征值对应的特征向量。这个\(n'\)个特征向量组成的矩阵\(W\)即我们需要的矩阵。对于原始数据集,我们只需要用\(z_i=W^Tx_i\),就可以把原始数据集降到最小投影距离的\(n'\)维数据集。

3.3 基于最大可分性推导PCA

从最大可分性出发,样本点\(x_i\)在新空间中超平面的投影是\(W^Tx_i\),如果所有样本点的投影尽可能分开,则应该使投影后样本点的方差最大化。

投影后样本点的方差是\(\sum_{i=1}^mW^Tx_ix_i^TW\),因此目标函数可以写成
\[
\begin{align}
& \underbrace{max}_W\,-tr(W^TXX^TW) \& s.t.\,W^TW=I
\end{align}
\]
上式其实和基于最近重构性推导PCA的目标函数其实差不多,其中一个是加负号的最小化,一个是最大化。
对基于最大可分性推导得到的目标函数最大化,利用拉格朗日乘子法可以得到
\[
XX^TW = -\lambda{W}
\]

3.4 核主成分分析(KPCA)

PCA中,我们假设存在一个线性的超平面,可以对数据投影,但工业上大多数时候数据都是线性不可分的,这里就需要用到和核SVM一样的思想,即核主成分分析(kernelized PCA,KPCA),是基于核技巧对非线性可分数据进行降维。

KPCA首先会把数据从\(n\)维映射到更高的\(N\)维,让数据线性可分后又会把数据映射回低维\(n'\),即\(n'<n<N\)。

假设我们将在高维特征空间把数据投影到由\(W=(w_1,w_2,\cdots,w_d)\)确定的超平面上,则\(W\)为
\[
ZZ^TW = (\sum_{i=1}^mz_iz_i^T)W=\lambda{W}
\]
其中\(z_i\)是样本点再高维特征空间中的像,即特征分解问题变为
\[
\begin{align}
W & = {\frac{1}{\lambda}}(\sum_{i=1}^mz_iz_i^T)W \& = \sum_{i=1}^mz_i{\frac{z_i^TW}{\lambda}} \& = \sum_{i=1}^mz_i\alpha_i^j
\end{align}
\]
其中\(a_i^j={\frac{1}{\lambda}}z_i^TW\)是\(\alpha_i\)的第\(j\)个分量。

假设\(z_i\)是由原始样本点\(x_i\)通过映射\(\phi\)产生,即\(z_i=\phi(x_i)\),则特征分解问题变为
\[
(\sum_{i=1}^m\phi(x_i)\phi(x_i)^T)W = \lambda{W}
\]
\(W\)变为
\[
W=\sum_{i=1}^m\phi(x_i)\alpha_i^j
\]
由于我们并不知道\(\phi\)是什么,一般情况下\(\phi\)不需要显示计算,通过核函数转换即可。因此引入核函数
\[
k(x_i,x_j)=\phi(x_i)^T\phi(x_j)
\]
将核函数和\(w_j\)代入特征分解问题,可得
\[
K\alpha^j=\lambda\alpha^j
\]
其中\(K\)为\(k\)对应的核矩阵,对于上述特征值分解问题,去\(K\)最大的\(d'\)个特征值对应的特征向量即可。

对于新样本\(x\),他投影后的第\(j\quad(j=1,2,\cdots,d')\)维坐标为
\[
\begin{align}
z_j & = W^T\phi(x) \& = \sum_{i=1}^m\alpha_i^j\phi(x_i)^T\phi(x) \& = \sum_{i=1}^m\alpha_i^jk(x_i,x)
\end{align}
\]
从上述特征分解可以看出,KPCA需要对所有样本求和,因此它的计算开销较大。

四、主成分分析流程

4.1 输入

样本集\(D=\{x_1,x_2,\cdots,x_n\}\);低维空间维数\(n'\)。

4.2 输出

降维后的样本集\(D'\)。

4.3 流程

  1. 对所有样本进行中心化:\(x_i\leftarrow{x_i}-{\frac{1}{m}}\sum_{i=1}^m{x_i}\)
  2. 计算样本的协方差矩阵\(XX^T\)
  3. 对协方差矩阵\(XX^T\)做特征值分解
  4. 取最大的\(n'\)个特征值所对应的特征向量\((w_1,w_2,\cdots,w_{n'})\),将所有的特征向量标准化后,组成特征向量矩阵\(W\)
  5. 对样本集中的每一个样本\(x^{(i)}\),转化为新的样本\(z^{(i)}=W^Tx^{(i)}\)
  6. 得到输出样本集\(n'=(z^{(1)},z^{(2)},\cdots,z^{(m)})\)

降维后低维空间的维数\(n'\)通常是用户事先指定的,一般选择使用交叉验证的方法选择最好的\(n'\)值。对于PCA,有时候也会从重构的角度指定一个降维到的主成分比重阈值\(t\),这个阈值的范围一般是\((0,1]\),然后选取使下式成立的最小\(n'\)值
\[
{\frac{\sum_{i=1}^{n'}\lambda_i}{\sum_{i=1}^{n}\lambda_i}}\geq{t}
\]

五、主成分分析优缺点

5.1 优点

  1. 只需要以方差衡量信息量,不受数据集以外的因素影响
  2. 主要计算是特征值分解,计算简单,易于实现

5.2 缺点

  1. 主成分由于是降维得到,没有原始样本那样较强的解释性
  2. 由于PCA降维会丢掉不少的信息,可能对后续的数据处理有影响

六、小结

PCA作为一个无监督学习的降维方法,只需要对特征值分解,就可以压缩数据,对数据去噪声。但是PCA还是有不少缺点的,针对PCA的缺点,也出现了很多PCA的变种,如解决非线性数据降维的KPCA;解决内存限制的增量的Incremental PCA;解决稀疏数据降维的Sparse PCA等。

由于PCA涉及过多的数学公式,以及有着较强逻辑和空间处理。如果不是很懂可以结合代码然后多看几遍。

原文地址:https://www.cnblogs.com/nickchen121/p/11686796.html

时间: 2024-10-01 02:26:05

05-03 主成分分析(PCA)的相关文章

降维(一)----说说主成分分析(PCA)的源头

降维(一)----说说主成分分析(PCA)的源头 降维系列: 降维(一)----说说主成分分析(PCA)的源头 降维(二)----Laplacian Eigenmaps --------------------- 主成分分析(PCA) 在很多教程中做了介绍,但是为何通过协方差矩阵的特征值分解能够得到数据的主成分?协方差矩阵和特征值为何如此神奇,我却一直没弄清.今天终于把整个过程整理出来,方便自己学习,也和大家交流. 提出背景 以二维特征为例,两个特征之间可能存在线性关系的(例如这两个特征分别是运

K-L变换和 主成分分析PCA

一.K-L变换 说PCA的话,必须先介绍一下K-L变换了. K-L变换是Karhunen-Loeve变换的简称,是一种特殊的正交变换.它是建立在统计特性基础上的一种变换,有的文献也称其为霍特林(Hotelling)变换,因为他在1933年最先给出将离散信号变换成一串不相关系数的方法.K-L变换的突出优点是它能去相关性,而且是均方误差(Mean Square Error,MSE)意义下的最佳变换. 下面就简单的介绍一下K-L变换了. 设,随机向量X ∈Rn(n阶列向量),它的均值向量为mX,则其协

机器学习中的数学(4)-线性判别分析(LDA), 主成分分析(PCA)

机器学习中的数学(4)-线性判别分析(LDA), 主成分分析(PCA) 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected] 前言: 第二篇的文章中谈到,和部门老大一宁出去outing的时候,他给了我相当多的机器学习的建议,里面涉及到很多的算法的意义.学习方法等等.一宁上次给我提到,如果学习分类算法,最好从线性的入手,线性分类器最简单的就是

主成分分析(PCA)

相对与网上很多人分享的有关PCA的经历,我第一次接触PCA却不是从人脸表情识别开始的,但我所在的实验室方向之一是人脸的研究,最后也会回到这个方向上来吧. PCA(principal components analysis)是一种非常有用的统计技术,它已经应用于人脸识别和图像压缩领域中,并且是高维数据计算模型的常用技术.简单说是把高维数据将成低维数据,比如100000x100000的矩阵降成100000x100的. 从例子中也看得出在数学模型中直观看到的是对矩阵进行的各种各样的变形最终达到我们所需

深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening

主成分分析与白化是在做深度学习训练时最常见的两种预处理的方法,主成分分析是一种我们用的很多的降维的一种手段,通过PCA降维,我们能够有效的降低数据的维度,加快运算速度.而白化就是为了使得每个特征能有同样的方差,降低相邻像素的相关性. 主成分分析PCA PCA算法可以将输入向量转换为一个维数低很多的近似向量.我们在这里首先用2D的数据进行试验,其数据集可以在UFLDL网站的相应页面http://ufldl.stanford.edu/wiki/index.php/Exercise:PCA_in_2D

机器学习 —— 基础整理(四):特征提取之线性方法——主成分分析PCA、独立成分分析ICA、线性判别分析LDA

本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensionality) 维数灾难就是说当样本的维数增加时,若要保持与低维情形下相同的样本密度,所需要的样本数指数型增长.从下面的图可以直观体会一下.当维度很大样本数量少时,无法通过它们学习到有价值的知识:所以需要降维,一方面在损失的信息量可以接受的情况下获得数据的低维表示,增加样本的密度:另一方面也可以达到去噪

线性判别分析(LDA), 主成分分析(PCA)及其推导【转】

前言: 如果学习分类算法,最好从线性的入手,线性分类器最简单的就是LDA,它可以看做是简化版的SVM,如果想理解SVM这种分类器,那理解LDA就是很有必要的了. 谈到LDA,就不得不谈谈PCA,PCA是一个和LDA非常相关的算法,从推导.求解.到算法最终的结果,都有着相当的相似. 本次的内容主要是以推导数学公式为主,都是从算法的物理意义出发,然后一步一步最终推导到最终的式子,LDA和PCA最终的表现都是解一个矩阵特征值的问题,但是理解了如何推导,才能更深刻的理解其中的含义.本次内容要求读者有一些

机器学习——降维(主成分分析PCA、线性判别分析LDA、奇异值分解SVD、局部线性嵌入LLE)

机器学习--降维(主成分分析PCA.线性判别分析LDA.奇异值分解SVD.局部线性嵌入LLE) 以下资料并非本人原创,因为觉得石头写的好,所以才转发备忘 (主成分分析(PCA)原理总结)[https://mp.weixin.qq.com/s/XuXK4inb9Yi-4ELCe_i0EA] 来源:?石头?机器学习算法那些事?3月1日 主成分分析(Principal components analysis,以下简称PCA)是最常用的降维方法之一,在数据压缩和消除冗余方面具有广泛的应用,本文由浅入深的

主成分分析PCA详解

转载请声明出处:http://blog.csdn.net/zhongkelee/article/details/44064401 一.PCA简介 1. 相关背景 上完陈恩红老师的<机器学习与知识发现>和季海波老师的<矩阵代数>两门课之后,颇有体会.最近在做主成分分析和奇异值分解方面的项目,所以记录一下心得体会. 在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律.多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加