主成分分析PCA

目录

一、PCA相关概念

1、什么是PCA?

2、特征维度约减的概念与目的

3、主成分分析的主要步骤

二、PCA的简单实现

1、导入库

2、选取一个二维数据

3、查看数据分布情况

4、中心化数据

5、求协方差矩阵

6、求特征值及特征向量

7、对特征值进行从大到小排序并取最大的n个特征值下标

8、最大的n个值对应的特征向量及低维数据的重构

9、输出原数据投影到选取的特征向量的值

三、总结


一、PCA相关概念

1、什么是PCA?

在数据集提供丰富信息的同时,数据之间也存在大量相关性从而会增加问题分析的复杂性。所以需要找到一种合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。

由于各变量之间存在一定的相关关系,因此可以考虑进行特征维度约减,即将关系紧密的变量变成尽可能少的新变量(即降维),使这些新变量是两两不相关的,那么就可以用较少的综合指标分别代表存在于各个变量中的各类信息,以便找到需要的主成分特征。主成分分析(PCA)与因子分析就属于这类降维算法。

主成分分析(PCA)是一种常用的数据降维方法,可以将高维数据转换为低维空间,同时保留原始数据中最具代表性的信息。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。

2、特征维度约减的概念与目的

特征维度约减——将给定的n个样本(每个样本维度为p维)通过特征变换和映射矩阵高维空间映射到低维子空间

原始数据:X\in R^{p*1}

进行线性变化(与G^{T}\in R^{d*p}求内积)得到约减后的数据:Y\in R^{d}

目的:使机器学习算法在高位空间中表现更具鲁棒性,筛选出有价值的维度(有价值点位有限)

                可视化、高效存储和检索、噪声消除

3、主成分分析的主要步骤

对白数据进行线性拉伸S(得主成分1)和线性旋转R(得主成分2)得出特征向量

3.1求出所有值的均值,然后将所有案例都减去该均值

X-\bar{X}

中心化后均值都为0

3.2求样本的协方差矩阵

原数据的协方差为:

C=\begin{bmatrix} cov(x,x) &cov(x,y) \\ cov(x,y)& cov(y,y) \end{bmatrix}

=\frac{1}{n-1}\begin{bmatrix} x_{1} &x_{2} \\ y_{1}& y_{2} \end{bmatrix}\begin{bmatrix} x_{1} &y_{1} \\ x_{2} & y_{2} \end{bmatrix}=\frac{1}{n-1}DD^{T}

=\begin{bmatrix} 1 &0 \\ 0&1 \end{bmatrix}

D——data(数据)

左上右下对角线上为方差,求最大值

左下右上对角线为协方差,求最小值

cov(x,y)=\frac{\sum_{i=1}^{n}(x_{i}-\bar{x})(y_{i}-\bar{y})}{n-1}

D^{'}=RSD

(即对原数据进行中心化)

D^{'T}=(RSD)^{T}=D^{T}S^{T}R^{T}

代入上述公式:

C^{'}=\frac{1}{n-1}D^{'}D^{'T}

                   =\frac{1}{n-1}RSD(RSD)^{T}

                    =\frac{1}{n-1}RSDD^{T}S^{T}R^{T}

                      =RS(\frac{1}{n-1}DD^{T})S^{T}R^{T}

即其中有原数据的协方差,即最终结果为:

C^{'}=RSS^{T}R^{T}

因为拉伸情况 S=S^{T}   旋转情况R^{T}=R^{-1}

令    L=SS^{T}=\begin{bmatrix} a^{2} &0 \\ 0 & b^{2} \end{bmatrix}

C^{'}=RLR^{-1}

3.3 求得特征值和特征向量

协方差矩阵的特征值即为L:L=\begin{bmatrix} \lambda _{1} &0 \\ 0&\lambda _{2} \end{bmatrix}=SS^{T}=\begin{bmatrix} a^{2} &0 \\ 0 & b^{2} \end{bmatrix}

a^{2}b^{2}是两个轴方向的方差,同时也是协方差矩阵的特征值

特征向量为新向量下的横纵坐标,即为R:R=\begin{bmatrix} \vec{v_{1}}, &\vec{v_{2}} \end{bmatrix}

3.4 将特征值按照从大到小的顺序排序,选择其中最大的k个,及其对应特征向量

3.5 将原始数据投影到选取的特征向量上

3.6 输出投影后的数据集

投影图如下:


二、PCA的简单实现

1、导入库
import numpy as np
import matplotlib.pyplot as plt
2、选取一个二维数据

3、查看数据分布情况
data = np.genfromtxt("xxhg/1.csv", delimiter=",")
x_data = data[:,0]
y_data = data[:,1]
plt.scatter(x_data,y_data)
plt.show()

数据集点比较少,将就看看先

4、中心化数据
def zeroMean(dataMat):
    # 按列求平均,即各个特征的平均
    meanVal = np.mean(dataMat, axis=0) 
    newData = dataMat - meanVal
    return newData, meanVal
5、求协方差矩阵
    #求协方差矩阵
newData,meanVal=zeroMean(data)  
    # np.cov用于求协方差矩阵,参数rowvar=0说明数据一行代表一个样本
covMat = np.cov(newData, rowvar=0)
6、求特征值及特征向量
    #求特征值和特征向量
eigVals,eigVects = np.linalg.eig(np.mat(covMat))
7、对特征值进行从大到小排序并取最大的n个特征值下标
    #特征值排序
eigValPaixu=np.argsort(eigVals)
    #取最大的n个特征值下标
n_eigValPaixu=eigValPaixu[-1:-(1+1):-1]#从末尾开始取每隔一个元素取一次直到倒数第二个元素
8、最大的n个值对应的特征向量及低维数据的重构
    #对应特征向量
n_eigVect=eigVects[:,n_eigValPaixu]
    #低维特征数据及重构
lowDD=newData*n_eigVect
reconMat=(lowDD*n_eigVect.T)+meanVal
9、输出原数据投影到选取的特征向量的值
data = np.genfromtxt("xxhg/1.csv", delimiter=",")
x_data = data[:,0]
y_data = data[:,1]
plt.scatter(x_data,y_data)

x_data=np.array(reconMat)[:,0]
y_data = np.array(reconMat)[:,1]
plt.scatter(x_data,y_data,c='r')
plt.show()

三、总结

1、PCA容易收到离群点的影响

2、PCA和SVD(奇异值分解)的关联

SVD:

D^{T}=U\sum V^{T}最右的矩阵V,即为PCA的主成分R

PCA需要先求出协方差矩阵,计算量较大

SVD优点:一部分实现可不求出协方差矩阵C也可求出右奇异矩阵V,计算量降低。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值