PCA-主成分分析笔记

目录:
一、理解
二、示例
三、数学原理
四、基础数学知识
五、python代码实现

一、理解
1、一般理解
假设:不同维度的数据之间往往并非无关,尤其多个特征变量之间往往存在较强的相关关系,造成了信息的冗余;
降维:实现数据由m维到n维的转变(m>n),从而提取数据的主要特征成分(降维);
好处:降维的目的,有助于减少数据存储和基础上,降低算法的复杂度和计算消耗,同时争取尽可能少地让数据的信息量损失;
2、业务理解
精简特征变量的基础上,能够比较快速地训练模型、降低模型的复杂度,并有助于后续模型预测的稳定性;
二、示例
1、pca的算法步骤
设有m条n维数据。
1)在python中将原始数据按列组成n行m列矩阵X
2)将每一维数据进行0均值化(中心化)处理;
2)计算协方差矩阵C=1/m *XX^T;
3)计算协方差矩阵的特征值和特征向量;
4)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P;
5)Y=PX即为降维到k维后的数据;
2、计算实例
1)问题:
求解:以下数据从二维降至一维(m=5,n=2)
1 1 2 4 2(第1维,呈现在数据表中的第一个字段)
1 3 3 4 4(第2维,呈现在数据表中的第二个字段)
2)0均值化
-1,-1,0,2,0
-2,0,0,1,1
3)计算协方差矩阵C=1/m *XX^T
1/m = 1/5
X:
-1,-1,0,2,0
-2,0,0,1,1
X^T:
-1,-2
-1,0
0,0
2,1
0,1
结果:C=
6/5,4/5
4/5,6/5
4)计算特征值和特征向量
待解的A-λE(=0)为:
6/5-λ,4/5
4/5,6/5-λ
依据2阶行列式求解λ:
λ2=2,对应特征向量为:(只需要取第一个元素即可)
6/5a+4/5b=2a =>a=b =>(1,1)
λ1=2/5,对应特征向量为:
6/5a+4/5b=2/5a =>a=-b =>(-1,1)
5)矩阵P
矩阵P为特征向量由大到小顺序排成:
1,1
-1,1
矩阵P^T为:
1,-1
1,1
可以验证协方差矩阵C的对角化:
PCP^T为:
2,0
0,2/5
6)Y=PX计算
用P的第一行乘以数据矩阵,就得到了降维后的表示:
P为:(1,1)
X为:
-1,-1,0,2,0
-2,0,0,1,1
降维后的结果Y为:
-3,-1,0,3,1
三、数学原理(为何PCA需要求解协方差矩阵?)
1)使用PCA降维的目的
去冗余:尽量去除区分度较小的维度变量,也即方差较小;
去噪:尽量使得保留下来的维度变量之间的相关性保持较小水平,即协方差较小,让协方差矩阵对角线之外的元素尽可能为0;
映射协方差矩阵:既有方差,对角线还有协方差;
2)协方差矩阵的特征值相关特征
a.特征值是各维度上的新方差;
b.也是各个维度本身应该拥有的能量;
c.对角化后的协方差矩阵,对角线上较小的新方差对应的就是那些该去掉的维度。所以我们只取那些含有较大能量(特征值)的维度,其余的就舍掉即可。

四、基础数据知识
1、协方差矩阵
1)方差(Variance)
度量一组数据的分散程度,是各个样本与样本均值的差的平方和的均值:
在这里插入图片描述
2)协方差(Covariance)
度量两个变量变动的同步程度,也就是度量两个变量线性相关性程度:
如果两个变量的协方差为0,则统计学上认为二者线性无关。注意两个无关的变量并非完全独立,只是没有线性相关性而已。
计算公式如下:
在这里插入图片描述
解释:如果协方差大于0表示一个变量增大是另一个变量也会增大,即正相关,协方差小于0表示一个变量增大是另一个变量会减小,即负相关。
3)协方差矩阵(Covariance matrix)
由数据集中两两变量的协方差组成,用来衡量各个变量之间的相关关系度;
示例:有x1,x2,x3三个维度的数据集,其协方差矩阵为:
在这里插入图片描述
矩阵表示:
在这里插入图片描述
注1:协方差矩阵一定是个对称的方阵;
注2:协方差矩阵对角线上的因子其实就是变量的方差:cov(X,X)=var(X);
4)协方差矩阵对角化
理解:等价于将协方差矩阵对角化,即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下排列,这样我们就达到了优化目的。
推导:
设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据。设Y的协方差矩阵为D,我们推导一下D与C的关系:
在这里插入图片描述
2、矩阵运算
1)矩阵相乘
在这里插入图片描述
小结:
矩阵A的i行元素,与矩阵B的j行元素依次相乘,结果为矩阵C的第i行j列的元素(元素的底标相逆);
两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。
2)矩阵加减
相同大小的矩阵,对应元素进行加减;
示例:
在这里插入图片描述
3、行列式求解
1)理解
一个解释是行列式就是行列式中的行或列向量所构成的超平行多面体的有向面积或有向体积;
二阶行列式:矩阵A的行向量或列向量决定的平行四边形的面积;
三阶行列式:三个向量在Oxyz空间上形成的平行六面体的有向体积;
2)二阶行列式
计算方法是“对角线法则”:主对角线元素积与副对角线元素积的差
示例:行列式为
a11 , a12
a21,a22
则结果为:a11a22 - a12a21
3)三阶行列式
计算方法是复杂版的“对角线法则”:
主对角线乘完以后元素位置要平移一下继续相乘,直到x、y、z分别开过头以后,再分别减去x、y、z开头的副对角线乘积。
示例:行列式为
x,y,z
r,s,t
a,b,c
则结果为:xsc+yta+zrb-zsa-yrc-xtb
4、齐次线性方程组
设其系数矩阵为A,未知项为X,则其矩阵形式为AX=0;
常数项全为0的n元线性方程组:
在这里插入图片描述
5、矩阵特征值和特征向量计算
1)定义
设A是n阶方阵,若数λ和n维非零列向量x,使得Ax = λ x成立,则称λ是方阵A的一个特征值,x为方阵A的对应于特征值λ的一个特征向量。
注1:方阵就是特殊的矩阵,当矩阵的行数与列数相等的时候,称它为方阵;
注2:对于非方阵,是没有特征值的,但会有条件数;
注3:特征向量x为非零列向量。
2)构建方程
(A - λE) x=0 => |A - λE|=0
注:E为单位矩阵;
3)依据齐次线性方程组求解特征值λ,并将求解出来的λ带入Ax = λ x,给出认为界定的特征向量x。

五、python代码实现

import numpy as np
import pandas as pd

##数据准备
data = pd.read_csv(r'/data/1/home/...')

#定义函数
def pca(data,topNfeat=9999999):
    data = np.mat(data)
    meanVals = np.mean(data,axis=0) #按列计算,axis=1按行计算
    meanRemoved = data - meanVals #0均值化
    covMat = np.cov(meanRemoved,rowvar=False) #计算协方差矩阵,rowvar=False列为变量
    eigVals,eigVects = np.linalg.eig(np.mat(covMat)) #求协方差矩阵的特征值和特征向量
    eigValInd = np.argsort(eigVals) #对序列进行从小到大的排序,返回对应的index
    eigValInd = eigValInd[:-(topNfeat+1):-1] #步长为1,进行反向提取,提取所需的特征值最大的几个
    redEigVects = eigVects[:,eigValInd] #将特征值对应的特征向量构建成矩阵
    lowDDateMat = meanRemoved * redEigVects  #0均值化的数据与特征向量矩阵相乘,映射到新的坐标基空间
    reconMat = (lowDDateMat * redEigVects.T) + meanVals  #回复原有数据
    return lowDDateMat

#降维计算
pca(data,1)

参照:
1、https://blog.csdn.net/babywong/article/details/50085239
2、https://blog.csdn.net/qq_37469992/article/details/56844407
3、http://blog.codinglabs.org/articles/pca-tutorial.html
4、https://blog.csdn.net/qq_32742009/article/details/82217051
5、https://blog.csdn.net/qq_38177302/article/details/81586289

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值