PCA(主成分分析法)

主成分分析法

python代码实现

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
sns.set(style='whitegrid', font='Times New Roman', font_scale=0.4)
plt.style.use('seaborn')
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
X = np.array([-1,-1,-3,1,2,3])
Y=np.array([-1,-1,-2,1,1,2])
sns.scatterplot(x=X,y=Y)
plt.show()
C= np.array([-1,-1,-1,-1,-3,-2,1,1,2,1,3,2]).reshape(-1,2)
print(C)
pca = PCA(n_components=2)
newX = pca.fit_transform(C)     #等价于pca.fit(C) pca.transform(X)
print(newX)
invX = pca.inverse_transform(C)  #将降维后的数据转换成原始数据

print(pca.explained_variance_ratio_)

# 我们所训练的pca对象的n_components值为2,即保留2个特征,第一个特
# 征占所有特征的方差百分比为0.99244289,意味着几乎保留了所有的信息
# 。即第一个特征可以99.24%表达整个数据集,因此我们可以降到1维

pca = PCA(n_components=1)
newX = pca.fit_transform(C)
print(newX)
print(pca.explained_variance_ratio_)

结果

0 [1.5283382047955922]

1 [1.528338204795591]

2 [3.7421235964078305]

3 [-1.254159330068931]

4 [-2.0766959542489096]

5 [-3.467944721681171]

贡献率: 0.99332163

主成分分析是一种降维思想。通过线性变化竟可以用少数指标代表数据的整体分布特征,一般只要保留原信息的80%左右就可以了。

如图所示,通过变换坐标轴,降低维度而又保持原有数据的最大特征!

优点: 降维可以缓解维度灾难。

应用: 降维一般用于数据的预处理,对大量数据进行特征提取以及特征分析时候,PCA可以巧妙的解决大量属性带来的函数的维灾问题。

知识储备

- 我们知道方差是描述数据波动的情况的。 - 协方差是描述相关性的。 - 这里给出如下数据x,y,一共两个维度。

对数据各自减去均值处理

计算协方差矩阵(两维)

求协方差的特征值和特征向量

特征值0.0490833989对应特征向量为第一条向量,这里的特征向量都归一化为单位向量。

如何求矩阵特征值

特征值以及特征向量的本质复习

协方差矩阵理解

   1)协方差矩阵能处理多维问题;

   2)协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。

   3)协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。

   4)样本矩阵中若每行是一个样本,则每列为一个维度,所以计算协方差时要按列计算均值。

将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。这里特征值只有两个,我们选择其中最大的那个,这里是1.28402771,对应的特征向量是(-0.677873399, -0.735178656)T。我们是从二维降到一维,所以k取一,并且是最大的。

选取的k个特征向量组成的矩阵为EigenVectors(nk)。
那么投影后的数据FinalData为FinalData(101)
= DataAdjust(10
2矩阵) x 特征向量(-0.677873399, -0.735178656)T

得到的结果如下图:

降维完成,同时又达到保真性。

### 问题思考

  1. 为什么选取k的特征值越大越好?

简单来说把数据中心化,减少过度拟合的可能性。

  1. 为什么选取k的特征值越大越好?‘

最好的k维特征是将n维样本点转换为k维后,每一维上的样本方差都很大。

  1. 在n维中选多少个k最合适?

k(特征向量)取得越多越好,k越多熵越大,样本不确定性越大,越接近真实数据。如果k越大就达不到我们说的降维效果了。所以这是个经验之谈
有些研究工作表明,所选的主轴总长度占所有主轴长度之和的大约85% 即可,其实,这只是一个大体的说法,具体选多少个,要看实际情况而定。如下图公式。注:n为样本数,k为我们选的维数

PCA原理总结

特征值在线性代数里面我们求过无数次了,对一个n*n的对称矩阵进行分解,我们可以求出它的特征值和特征向量,就会产生n个n维的正交基,每个正交基会对应一个特征值。然后把矩阵投影到这N个基上,此时特征值的模就表示矩阵在该基的投影长度
特征值越大,说明矩阵在对应的特征向量上的方差越大,样本点越离散,越容易区分,信息量也就越多。因此,特征值最大的对应的特征向量方向上所包含的信息量就越多,如果某几个特征值很小,那么就说明在该方向的信息量非常少,我们就可以删除小特征值对应方向的数据,只保留大特征值方向对应的数据,这样做以后数据量减小,但有用的信息量都保留下来了。PCA就是这个原理。

步骤回顾

1.去除平均值
2.计算协方差矩阵
3.计算协方差矩阵的特征值和特征向量
4.特征值从大到小排序
5.保留最上面k个特征向量
6.将数据转换到k个向量构件的新空间中
7.n维矩阵*k维特征向量=k维矩阵
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PCA主成分分析)是一种常用的降维技术,它通过将原始数据投影到新的特征空间来实现数据的降维和去除冗余信息。下面是PCA主成分分析的步骤: 1. 数据标准化:首先,需要对原始数据进行标准化处理,确保数据的均值为0,方差为1。这一步骤可以保证不同尺度的数据能够被平等对待。 2. 计算协方差矩阵:接下来,需要计算数据的协方差矩阵。协方差矩阵反映了数据中不同特征之间的相关性。 3. 计算特征值和特征向量:通过对协方差矩阵进行特征值分解,可以得到该矩阵的特征值和特征向量。特征向量代表了数据在新特征空间中的方向,而特征值代表了数据在这些方向上的重要程度。 4. 选择主成分:根据特征值的大小,可以选择最重要的特征向量作为新的特征空间的基。通常情况下,选择特征值较大的前k个特征向量作为主成分。 5. 构建投影矩阵:将选定的k个特征向量按列组成投影矩阵,用这个矩阵将原始数据投影到新的k维特征空间中。 6. 数据转换:最后,利用构建的投影矩阵,对原始数据进行线性变换,即将原始数据映射到新的k维特征空间中。这样就实现了数据的降维和去除冗余信息。 通过以上步骤,PCA主成分分析可以帮助我们在保留数据主要特征的基础上,将高维的原始数据转化为低维的新特征空间,从而方便我们进行进一步的数据分析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值