主成分分析(PCA)原理与特征选取

主成分分析(PCA)原理与特征选取



前言

在许多领域中存在着大量数据特征,我们通常需要在海量的数据中提取出有价值的信息,例如如何在众多的数据特征中筛选或者是提取出高度有效的特征指标,而PCA就是一种能够解决此类问题的有效方法。


一、什么是PCA?

PCA(Principal Component Analysis),即主成分分析方法,主成分顾名思义就是代表一个数据中或者是事件中最重要、最主要的成分。主成分分析是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上(k<=n),这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。

二、PCA作用

主成分分析能将高维的数据映射到低维的空间中,同时保留数据集中最重要的特征,其中主要作用包括:

  1. 数据降维:PCA能够将高维数据转换为低维空间表示,能够很好的节约计算成本,同时更加有利于进行数据可视化与理解数据等。
  2. 特征提取:PCA可以识别数据中最重要的特征,通过累计方差贡献率,找到特征之间得分最高、对数据影响最大的特征。
  3. 压缩数据:PCA可以对数据进行压缩,减少存储空间与传输成本,在压缩的同时,尽可能保留了数据最主要的信息。
  4. 去噪:PCA可以帮助消除数据中的噪声,改善数据的质量和可靠性。

三、PCA原理

主成分分析法是运用“降维”思想,把多个指标变换成少数综合指标的多元统计方法,这里的综合指标就是主成分。每个主成分都是原始变量的线性组合,彼此相互独立,并保留了原始变量绝大部分信息。其本质是通过原始变量的相关性,寻求相关变 量的综合替代对象,并且保证了转化过程中的信息损失最小 。根据标准化后的数据集计算协方差矩阵R:

注意需要先对数据进行标准化

计算矩阵 R 的特征值 λ 1 ≥λ 2 ≥…≥λ n ≥ 0及 对应的特征向量 u1 ,u2 ,…,un ,其中 uj= (u1 j,u2 j, …,u nj) ,u nj 表示第 j 个特征向量的第 n 个分量; 由特征向量组成 n 个新的指标变量:

在这里插入图片描述

式中,y 1 是第 1 主成分,y 2 是第 2 主成分,…,y n 是第 n 主成分。 计算各主成分y j 贡献率 b j(j=1,2,…,n) 及 y 1,y 2 ,…,y n (p ≤ n)的累计贡献率 αp。

Alt

Alt

四、案例分析

1.引入库

#导入所需要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')

2.读入数据

#导入数据
data = pd.read_excel('你的数据.xlsx')
data.set_index('索引',inplace=True)
display(data.head())

3.主成分分析获取重要特征数据

from sklearn.decomposition import PCA   #机器学习中pca库
from sklearn.preprocessing import StandardScaler  #标准化库
# 标准化数据
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data.iloc[:, :-1]) #最后一列为标签
# 创建PCA模型
pca = PCA()
# 拟合PCA模型
pca.fit(scaled_data)
# 把累计方差解释可视化
explained_variance_ratio = pca.explained_variance_ratio_
cumulative_variance_ratio = np.cumsum(explained_variance_ratio)
plt.figure(figsize=(8, 6))
plt.plot(range(1, len(cumulative_variance_ratio) + 1), cumulative_variance_ratio, marker='o', linestyle='--')
plt.xlabel('Number of Principal Components')
plt.ylabel('Cumulative Explained Variance')
plt.title('Cumulative Explained Variance vs. Number of Principal Components')
plt.grid()
plt.show()
# 计算需要多少主成分以达到80%的累积方差
n_components = np.argmax(cumulative_variance_ratio >= 0.80) + 1
print(f"需要前 {n_components} 个主成分以达到80%的累积方差")
# 获取方差解释率超过80%的特征指标
selected_variance_ratios = explained_variance_ratio[:n_components]
selected_features = data.columns[:-1][:n_components]
# 输出方差解释率超过85%的特征指标和它们的贡献得分
print("方差解释率超过80%的特征指标和它们的贡献得分:")
for feature, variance_ratio in zip(selected_features, selected_variance_ratios):
    print(f"特征: {feature}, 方差解释率: {variance_ratio:.4f}")
# 使用所选的主成分来转换数据
pca = PCA(n_components=n_components)
reduced_data = pca.fit_transform(scaled_data)

得到结构如下:
在这里插入图片描述
根据每个特征的贡献得分大小,可以有效的筛选出主要特征


总结

主成分分析的作用不仅仅于此,它还被广泛使用在各个领域,如金融、计算机视觉、文本分析等;关于主成分分析与特征提取方面还有很多改进的地方,例如可以将PCA与皮尔逊相关系数所结合,充分发挥两种方法的优点,提取出更具代表性和相关性的特征,从而提高模型的性能和可解释性。

  • 21
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维和模式识别方法。其原理可分为以下几个步骤: 1. 数据标准化:对原始数据进行标准化处理,使得数据的均值为0,方差为1,以消除不同特征之间尺度差异的影响。 2. 协方差矩阵计算:通过计算标准化后的数据的协方差矩阵,来衡量不同特征之间的相关性。协方差矩阵是一个对称矩阵,其对角线上的元素代表每个特征的方差,非对角线上的元素代表特征之间的协方差。 3. 特征值和特征向量计算:对协方差矩阵进行特征值分解,求出特征值和特征向量。特征值表示了协方差矩阵中的信息量大小,特征向量表示了协方差矩阵中的主要特征。 4. 主成分选择:按特征值的大小排序,选择前k个特征向量作为主成分。这些主成分是原始数据中最重要的方向,可以用来描述原始数据的大部分变异。 5. 数据转换:将原始数据投影到选取的主成分上,得到新的低维表示。这样可以实现数据的降维,同时保留原始数据中的大部分信息。转换后的数据可以用于后续的模式识别、聚类等任务。 PCA主成分分析的优点是能够通过线性变换找到数据中最重要的特征,实现数据降维同时保留大部分信息。它是一种无监督的方法,不需要依赖标签信息。然而,PCA也有一些限制,比如对数据的线性可分性有要求,对异常值比较敏感等。因此,在使用PCA时需要根据具体问题和数据的特点来选择合适的方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值