主成分分析(PCA)

在数据分析研究中,人们为了尽可能完整地搜集信息,对于每个样本往往要观测它的很多项指标,少者四、五项,多则几十项,这些指标之间通常不是相互独立而是相关的。因此,从统计分析或推断的角度来说,人们总是希望能把大量的原始指标组合成较少的几个综合指标,从而使分析简化。
例如,一个人的身材需要用好多项指标才能完整地描述,诸如身高、臂长、腿长、肩宽、胸围、腰围、臀围等,但人们购买衣服时一般只用高矮和胖瘦两个指标就够了,这里高矮和胖瘦就是描述人体形状的多项指标组合而成的两个综合指标。

主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一。PCA把原先的n个特征用数目更少的m个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,新的m个特征互不相关。
注:关于PCA避免陷入一个误区,新特征并不是原先特征里面抽取几个,而是原先特征的线性组合。
降维的必要性:
高维空间本身具有稀疏性。一维正态分布有68%的值落于正负标准差之间,而在十维空间上只有0.02%。
过多的变量(特征)会妨碍查找规律的建立,有些变量之间可能存在相关性
因此需要找到一个合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。

01.PCA降维

在这里插入图片描述

1. PCA降维原理

PCA原理:PCA中数据从原来的坐标系转换到了新的坐标系,新坐标系的选择是由数据D本身决定的。第一个新坐标轴选择的使得原始数据方差最大的方向(经过数据中心),第二个新坐标轴的选择和第一个坐标轴正交且具有最大方差的方向。该过程一直重复, 直至找到m个新的坐标轴。

为什么要方差最大?
找到数据最重要的方向(方差最大方向) 。由此,引出PCA一个非常重要的知识点:为什么数据的最大方差给出了数据的最重要的信息。
在这里插入图片描述
在这里插入图片描述
观察上图,给出了两个方向,在第一个方向当中,5个样本点在该方向的投影得到数据的方差最大.(因为方差代表的是离散程度。样本越离散,我们越容易区分每个样本点,信息量就越大)。在第2幅图中,给出的方向,使得样本点方差比较小,有些样本点已经挤在一块,不容易区分,对我们的价值较小。(通常认为,数据的某个特征维度上数据越分散,该特征越重要)

为什么要正交?
第一个主成分y_1就是从数据差异性最大(即方差最大)的方向提取出来的,第二个主成分则来自于数据差异性次大的方向,并且该方向与第一个主成分方向正交(为什么要求正交,第二主成分不应该再重复反映第一主成分已经反映的内容,所以求第二主成分时,除了有类似于第一主成分的约束条件外,还必须加上第二主成分与第一主成分不相关这一条件)。以此类推,第m个主成分y_m是与y_1,y_2,…y_m−1方向正交且方差最大的方向提取出来的。
那么如何找到这m个主成分,通过数据集的协方差矩阵及其特征值分析,我们就可以求得这些主成分的值。
注:投影距离(点到投影平面的距离) ,投影(样本点在超平面上上的投影)

理论支撑
在这里插入图片描述

协方差

在这里插入图片描述
在这里插入图片描述

协方差矩阵

在这里插入图片描述
在这里插入图片描述
关于求解给定样本的特征数据X的协方差矩阵,大家不用担心, numpy库里面求解协方差的函数np.cov:
我们来看一下cov函数的用法:
np.cov( [m, ‘y=None’, rowvar=True, , ‘fweights=None’, 'aweights=None’])
我们需要用到的参数:
m:array_like一个一维或二维数组,包含多个变量和观测值。m的每一行表示一个变量,每一列表示所有这些变量的单个观察值(这种情况默认一列代表一个样本)。
rowvar:其中rowvar=0(0=False),说明传入的数据一行代表一个样本;若非0,说明传入的数据一列代表一个样本。

数据预处理

在这里插入图片描述

降维

在这里插入图片描述

PCA处理步骤

去除平均值
计算协方差矩阵(cov)
计算协方差矩阵的特征值和特征向量(eigVals,eigVects = linalg.eig(mat(X)))
将特征值从大到小排序
保留最上面的N个特征向量
将数据转换到上述N个特征向量构建的新空间中

2.降维数据恢复

降维后的 k 维数据 恢复到 n 维数据

在这里插入图片描述

3.案例

Sklearn中PCA的使用方法

PCA,中文名:主成分分析,在做特征筛选的时候会经常用到,但是要注意一点,PCA并不是简单的剔除掉一些特征,而是将现有的特征进行一些变换.

  1. 函数原型及参数说明
    这里只挑几个比较重要的参数进行说明。
    sklearn.decomposition.PCA(n_components= )
    n_components: int, float, None 或 string,PCA算法中所要保留的主成分个数,也即保留下来的特征个数,例如 n_components = 1,将把原始数据降到一维.
  2. PCA对象的属性
    explained_variance_ratio_:返回所保留各个特征的方差百分比。(即百搭原先数据集多少信息量)
    n_components_:返回所保留的特征个数。

3.PCA常用方法
fit(X): 用数据X来训练PCA模型。
fit_transform(X):用X来训练PCA模型,同时返回降维后的数据。
inverse_transform(newData) :将降维后的数据转换成原始数据,但可能不会完全一样,会有些许差别。
transform(X):将数据X转换成降维后的数据,当模型训练好后,对于新输入的数据,也可以用transform方法来降维。

  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侬本多情。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值