PCA降维以及维数的确定

Posted gowithhappy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PCA降维以及维数的确定相关的知识,希望对你有一定的参考价值。

概述

PCA(principal components analysis)即主成分分析技术,又称为主分量分析,旨在利用降维的思想,把多个指标转换为少数的几个综合指标。

主成分分析是一种简化数据集的技术,它是一个线性变换。这个线性变化把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标上(称为第一主成分),第二个大的方差在第二个坐标上(称为第二主成分),以此类推。主成分分析经常用于减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。

PCA的原理就是将原来的样本数据投影到一个新的空间中。其中就是将原来的样本数据空间经过坐标变换矩阵变到新空间坐标下,新空间坐标由其原数据样本中不同维度之间的协方差矩阵中几个最大特征值对应的前几个特征向量组成。较小的特征值向量作为非主要成分去掉,从而可以达到提取主要成分代表原始数据的特征,降低数据复杂度的目的。

算法步骤

  1. 将n次采样的m维数据组织成矩阵形式(Xin R^{n imes m}Xin R^{n imes m})。具体形式如下所示:

    [left(egin{matrix}egin{matrix}x_{11}&x_{12}\x_{21}&x_{22}\end{matrix}&egin{matrix}cdots&x_{1m}\cdots&x_{2m}\end{matrix}\egin{matrix}vdots&vdots\x_{n1}&x_{n2}\end{matrix}&egin{matrix}ddots&vdots\cdots&x_{nm}\end{matrix}\end{matrix} ight) ]

  2. 将样本矩阵(XX)的每一列零均值化得新矩阵 (X^{prime}X^{prime})

    [oldsymbol{x}_{i} leftarrow oldsymbol{x}_{i}-frac{1}{m} sum_{i=1}^{m} oldsymbol{x}_{i} ]

  3. 计算其样本数据维度之间的相关度,此处使用协方差矩阵(CC)

    [cov=frac{1}{m}X^prime{X^prime}^T ]

  4. 计算协方差矩阵(CC)的特征值及其对应的特征向量,并特征值按照从大到小排列。

    [left(lambda_1,lambda_2,cdots,lambda_t ight)=left(egin{matrix}egin{matrix}p_{11}&p_{12}\p_{21}&p_{22}\end{matrix}&egin{matrix}cdots&p_{1t}\cdots&p_{2t}\end{matrix}\egin{matrix}vdots&vdots\p_{n1}&p_{n2}\end{matrix}&egin{matrix}ddots&vdots\cdots&p_{nt}\end{matrix}\end{matrix} ight)=left(oldsymbol{P}_{1}, oldsymbol{P}_{2}, ldots, oldsymbol{P}_{i} ight) , (其中lambda_1>lambda_2>cdots>lambda_t) ]

  5. 根据降维要求,比如此处降到(kk)维,取其前个(kk)向量组成降维矩阵(PP),如下所示:

    [P=left(oldsymbol{P}_{1}, oldsymbol{P}_{2}, ldots, oldsymbol{P}_{k} ight)^T , Pin R^{k imes n} ]

  6. 通过变换矩阵P对原样本数据(XX)进行坐标变换,从而达到数据降维与主成分提取的目的。

    [Y=Xullet P , Yin R^{k imes m} ]

重建误差的计算

在投影完成之后,需要对投影的误差进行重建,从而计算数据降维之后信息的损失,一般来说通过以下公式来计算。

[{error}_1=frac{1}{k}sum_{i=1}^{k}{||x^{left(i ight)}}-x_{approx}^{left(i ight)}||^2 ]

[{error}_2=frac{1}{m}sum_{i=1}^{m}{||x^{left(i ight)}}||^2 ]

其中:

  • (mm)个样本表示为((x^{left(1 ight)},x^{left(2 ight)},cdots,x^{left(m ight)})(x^{left(1 ight)},x^{left(2 ight)},cdots,x^{left(m ight)}))
  • 对应投影后的数据表示为((x_{approx}^{left(1 ight)},x_{approx}^{left(2 ight)},cdots,x_{approx}^{left(m ight)})(x_{approx}^{left(1 ight)},x_{approx}^{left(2 ight)},cdots,x_{approx}^{left(m ight)}))

则其比率(etaeta)

[eta=frac{{error}_1}{{error}_2} ]

通过(etaeta)来衡量数据降维之后信息的损失。

算法描述

进而我们总结出算法描述如下:

输入: 样本集(D=left{oldsymbol{x}_{1}, oldsymbol{x}_{2}, ldots, oldsymbol{x}_{m} ight}D=left{oldsymbol{x}_{1}, oldsymbol{x}_{2}, ldots, oldsymbol{x}_{m} ight})

低维空间维数

(kk)

过程:

  1. 对所有样本进行零均值化:(oldsymbol{x}_{i} leftarrow oldsymbol{x}_{i}-frac{1}{m} sum_{i=1}^{m} oldsymbol{x}_{i}oldsymbol{x}_{i} leftarrow oldsymbol{x}_{i}-frac{1}{m} sum_{i=1}^{m} oldsymbol{x}_{i})
  2. 计算样本的协方差矩阵(mathbf{X X}^{mathrm{T}}mathbf{X X}^{mathrm{T}})
  3. 对协方差矩阵(mathbf{X X}^{mathrm{T}}mathbf{X X}^{mathrm{T}})做特征值分解;
  4. 取最大的(kk)个特征值所对应的特征向量(left(oldsymbol{P}_{1}, oldsymbol{P}_{2}, ldots, oldsymbol{P}_{k} ight)left(oldsymbol{P}_{1}, oldsymbol{P}_{2}, ldots, oldsymbol{P}_{k} ight))
  5. 进行矩阵变换(Y=Pullet X , Yin R^{k imes m}Y=Pullet X , Yin R^{k imes m})

输出: 变换后的矩阵(Y=Xullet P , Yin R^{k imes m}Y=Xullet P , Yin R^{k imes m})

算法实现

选用的数据集

使用数据集为:Imported Analog EMG – Voltage下的EMG1、EMG2、…、EMG8部分的数据

实验代码展示

fileName = ‘c:UsersAdministratorDesktop机器学习作业PCApcaData1.csv‘;
X = csvread(fileName); 
m = size(X,1);
meanLine = mean(X,2);
R = size(X ,2);
%对原始数据做均值化处理,每一列都减去均值
A = [];
for i = 1:R
    temp = X(:,i) - meanLine;
    A = [A temp];
end
%求其协方差矩阵
C = A‘*A/R; 
%求协方差矩阵的特征值及其特征向量
[U,S,V] = svd(C); 
%设置降维的维度数k,从1维计算到R-1维
k=8; 
%计算投影后的样本数据Y
P=[];
for x = 1:k
    P = [P U(:,x)]; 
end
Y = X*P;
%计算数据重建误差以及比率
err1 = 0;
%获取样本X重建后的矩阵XR
XR= Y * pinv(P);
for i = 1:m
    err1 = norm(X(i,:)-XR(i,:))+err1;
end
%计算数据方差
err2 = 0;
for i=1:m
    err2 = norm(X(i,:))+err2;
end
eta = err1/err2

结果展示与分析

通过计算我们发现对应的特征值以及其对应的投影方向如下:

(lambda_1lambda_1)=1.8493对应的投影方向为((-0.0164,0.0300,-0.2376,0.4247,-0.6717,0.2356,-0.2196,0.4551)(-0.0164,0.0300,-0.2376,0.4247,-0.6717,0.2356,-0.2196,0.4551))

(lambda_2lambda_2)=1.3836对应的投影方向为((0.0910,0.1724,-0.0097,-0.8267,-0.1464,0.3599,0.0025,0.3570)(0.0910,0.1724,-0.0097,-0.8267,-0.1464,0.3599,0.0025,0.3570))

(lambda_3lambda_3)=0.5480对应的投影方向为((-0.1396,-0.4457,-0.1668,0.0870,0.2812,0.7696,-0.1742,-0.2115)(-0.1396,-0.4457,-0.1668,0.0870,0.2812,0.7696,-0.1742,-0.2115))

(lambda_4lambda_4)=0.4135对应的投影方向为((0.0622,0.1782,0.3136,-0.0080,-0.5387,0.2841,0.3300,-0.6214)(0.0622,0.1782,0.3136,-0.0080,-0.5387,0.2841,0.3300,-0.6214))

(lambda_5lambda_5)=0.3218对应的投影方向为((0.2126,-0.7813,0.3136,-0.0080,-0.5387,0.2841,0.3300,-0.6214)(0.2126,-0.7813,0.3136,-0.0080,-0.5387,0.2841,0.3300,-0.6214))

(lambda_6lambda_6)=0.1322对应的投影方向为((-0.0959,0.0340,-0.6943,0.0068,0.0269,0.0042,0.7119,0.0064)(-0.0959,0.0340,-0.6943,0.0068,0.0269,0.0042,0.7119,0.0064))

(lambda_7lambda_7)=0.0620对应的投影方向为((0.8881,-0.0497,-0.3407,-0.0198,-0.0103,-0.0424,-0.2075,-0.2176)(0.8881,-0.0497,-0.3407,-0.0198,-0.0103,-0.0424,-0.2075,-0.2176))

(lambda_8=9.5959 imes 10^{-17}lambda_8=9.5959 imes 10^{-17})对应的投影方向为((0.3536,0.3536,0.3536,0.3536,0.3536,0.3536,0.3536,0.3536)(0.3536,0.3536,0.3536,0.3536,0.3536,0.3536,0.3536,0.3536))

k取不同值时对应的误差比率如下所示:

k的取值 数据重建误差eat
1 0.8265
2 0.7105
3 0.6499
4 0.5940
5 0.5521
6 0.5294
7 0.5162

参考

  1. PCA主成分数量(降维维度)选择
  2. Imported Analog EMG – Voltage下的EMG1、EMG2、…、EMG8部分进行PCA/NMF降维

以上是关于PCA降维以及维数的确定的主要内容,如果未能解决你的问题,请参考以下文章

PCA 降维算法详解 以及代码示例

opencv实战——PCA算法的应用

LDA和PCA降维的原理和区别

PCA降维算法

matlab自带princomp(PCA降维方式)

PCA-特征提取