总述
主成分分析(Principal Component Analysis,PCA)是一种多变量统计方法,它是最常用的降维方法之一,通过正交变换将一组可能存在相关性的变量数据转换为一组线性不相关的变量,转换后的变量被称为主成分。PCA主要用于发现数据中的基本结构,及数据中变量之间的关系,也用于其他机器学习的数据预处理。
主成分分析主要两种算法:协方差矩阵的特征值分解和数据矩阵的奇异值分解方法。
原理
首先将给定的数据进行规范化,使得数据每一个变量的平均值为0,方差为1。之后对数据进行正交变换,原来由线性相关变量表示的数据,通过正交变换变成由若干个线性无关的新变量表示的数据。新变量是可能的正交变换中变量的方差的和(信息保存)最大的,方差表示在新变量上信息的大小,将新变量依次称为第一主成分、第二主成分等。
通俗一点来说,问如何表示你的家人,不必将你的七大姑八大姨全部拿出来介绍,选取最典型的代表,这个典型就是要其代表性最强的、信息保存最大的家里人来表示你的家族。
而如何具体量化这种相关或者不相关,就引入了协方差的概念
算法流程
传统的主成分分析通过数据的协方差矩阵或者相关矩阵的特征值分解进行,现在常用的方法是通过数据矩阵的奇异值分解进行。
以下描述利用奇异值分解进行主成分分析
输入:
m
×
n
m\times n
m×n样本矩阵
X
X
X,其每一行元素的均值为零;
输出:
k
×
n
k\times n
k×n样本主成分
Y
Y
Y。
参数:主成分个数k
1)构造新的
m
×
n
m\times n
m×n矩阵
x
⋅
=
1
n
−
1
X
T
(2)
x^·= {\frac{1}{\sqrt n-1}}\tag{2} X^T
x⋅=n−11XT(2)
x
⋅
x^·
x⋅每一列的均值为0。
2)对矩阵
x
⋅
x^·
x⋅进行截断奇异值分解,得到
x
⋅
=
U
∑
V
T
x^·= U\sum V^T
x⋅=U∑VT
有k个奇异值、奇异向量。矩阵V的前k列构成k个样本主成分。
3)求
k
×
n
k\times n
k×n样本主成分矩阵
x
⋅
=
V
T
X
x^·= V^TX
x⋅=VTX
使用指南
from sklearn.decomposition import PCA
PCA(n_components=None, copy=True, whiten=False)
sklearn提供了直接调用的API接口,其参数分别表示为:
n_components:
意义:PCA算法中所要保留的主成分个数n,也即保留下来的特征个数n
类型:int 或者 string,缺省时默认为None,所有成分被保留。
赋值为int,比如n_components=1,将把原始数据降到一个维度。
赋值为string,比如n_components='mle',将自动选取特征个数n,使得满足所要求的方差百分比。
copy:
意义:表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不 会有 任何改变,因为是在原始数据的副本上进行运算;若为False,则运行PCA算法后,原始训练数据的 值会改,因为是在原始数据上进行降维计算。
类型:bool,True或者False,缺省时默认为True。
whiten:
意义:白化,使得每个特征具有相同的方差。
类型:bool,缺省时默认为False
实际效果
在最近的kaggle比赛Ubiquant Market Prediction中,利用DNN的基础上,再加上PCA确实能够提高成绩。