主成分分析法(Principal Component Analysis,PCA)

什么是主成分分析法,他是用来干什么的

用于提取一系列样本的主要特征,从而在分类、相似度比较、匹配等操作中提高运算效率和算法准确度

举个例子:学校需要进行三好学生评比,但每个学生都有很多特征,比如:学习成绩、社会实践活动、道德品质、体育成绩等等。在评比中,有一些特征属于“无用特征”,比如身高、体重、衣服尺寸等等,这些特征在评比中是不应该被采纳的;而有一些特征属于“冗余特征”,比如各学科成绩和学科总成绩,实际上这二者有一个即可。

主成分分析法是一种特征提取方法,也可以称为特征降维方法,将很多个具有内在联系(线性相关)的特征转化为少数几个线性无关的特征,用这些少数几个特征来进行样本的区分比较,这些线性无关的变量称为主成分。

在给出算法实现之前,阐述一下PCA的数学思想:

根据p个特征的线性组合,得到一个新的特征z,使得该特征的方差最大,该特征即为主成分。

再次寻找p个特征的线性组合,得到新的特征,该特征与之前得到的主成分线性无关,且方差最大。

算法实现

假设有n个样本,p个特征,x_{i,j}表示第i个样本的第j个特征,样本的特征矩阵为

X=\begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1p} \\ x_{21} & x_{22} & \cdots & x_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{np} \\ \end{bmatrix} = [x_1,x_2,\cdots,x_p]

我们的目的是,找到一个转换矩阵,将p个特征转化为m个特征(m

主成分分析法(Principal Component Analysis,PCA)_第1张图片

①标准化

计算每个特征(p个特征)的均值和标准差

\overline{x_j}=\frac{1}{n}\sum_{i=1}^nx_{ij}

S_j=\sqrt{\frac{\sum_{i=1}^n(x_{ij}-\overline{x_j})^2}{n-1}}

将每个样本的每个特征进行标准化处理,得到标准化特征矩阵

X_{ij}=\frac{x_{ij}-\overline{x_j}}{S_j}

X_{stand}=\begin{bmatrix} X_{11} & X_{12} & \cdots & X_{1p} \\ X_{21} & X_{22} & \cdots & X_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ X_{n1} & X_{n2} & \cdots & X_{np} \\ \end{bmatrix} = [X_1,X_2,\cdots,X_p]

②计算标准化样本的协方差矩阵

主成分分析法(Principal Component Analysis,PCA)_第2张图片

协方差矩阵R如下

R=\begin{bmatrix} r_{11} & r_{12} & \cdots & r_{1p} \\ r_{21} & r_{22} & \cdots & r_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ r_{p1} & r_{p2} & \cdots & r_{pp} \\ \end{bmatrix}

③计算矩阵R的特征值和特征向量

计算矩阵R的特征值,并按照大小顺序排列,计算对应的特征向量,并进行标准化,使其长度为1

特征值:\lambda_1\ge\lambda_2\ge \dots \ge \lambda_p\ge0

特征向量:L_1=[l_{11},l_{12},\dots ,l_{1p}]^T \dots L_p=[l_{p1},l_{p2},\dots ,l_{pp}]^T

④给出主成分

第i个主成分为

F_i=l_{i1}X_1+l_{i2}X_2+\dots+l_{ip}X_p,(i=1,2,\dots,p)

⑤计算每个主成分的贡献率及累积贡献率

第i个主成分的贡献率为

\frac{\lambda_i}{\sum_{k=1}^p\lambda_k}

前i个主成分的累积贡献率为

\frac{\sum_{j=1}^i\lambda_j}{\sum_{k=1}^p\lambda_k}

通常,我们选取几个主成分,使得累积贡献率为80%。

但如果每个主成分的贡献率都相差不多,则不建议使用主成分分析法,因为主成分分析法一定程度上舍弃了部分信息,来提高整体的计算效率。同时,对于降维形成的主成分,我们经常无法找到他在实际情况中所对应的特征,这也是主成分分析法的缺陷所在。

你可能感兴趣的:(机器学习,数据分析,算法)