一、概述
主成分分析(PCA)是一种统计方法,它通过正交变换将一组可能相关的变量转换成一组线性不相关的变量,这些不相关变量称为主成分。PCA 常用于降维,即在保留数据集中大部分变异性的同时减少数据的维数。
二、基本步骤
数据标准化:
由于 PCA 受到数据尺度的影响,因此在进行 PCA 之前需要先对数据进行标准化处理,使得每个特征的均值为 0,标准差为 1。
计算协方差矩阵:计算数据的协方差矩阵,以确定数据特征之间的相关性。
![]()
计算特征值和特征向量:
求解协方差矩阵的特征值和对应的特征向量。特征向量决定了主成分的方向,而特征值决定了主成分的大小。
![]()

选择主成分:
根据特征值的大小选择最重要的几个特征向量,这些特征向量对应的主成分将用于数据的降维。
一般取累计贡献率超过80%的特征值所对应的第一、第二、 ,第
个主成分。第 i 个主成分:
![]()
贡献率:
![]()
构造新的空间:
使用选定的特征向量构造新的空间,将原始数据投影到这个新空间中。
转换到新空间:
将原始数据转换到由主成分构成的新空间中,实现降维。
三、代码实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
from mpl_toolkits.mplot3d import Axes3D
# 加载 Iris 数据集
data = load_iris()
X = data.data # 特征
y = data.target # 标签
# 原始数据的三维可视化
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
x_index = 0 # 第一个特征(花萼长度)
y_index = 1 # 第二个特征(花萼宽度)
z_index = 2 # 第三个特征(花瓣长度)
for target in np.unique(y):
ax.scatter(X[y == target, x_index], X[y == target, y_index], X[y == target, z_index], label=data.target_names[target])
ax.set_xlabel(data.feature_names[x_index])
ax.set_ylabel(data.feature_names[y_index])
ax.set_zlabel(data.feature_names[z_index])
ax.set_title('Iris 数据集的三维可视化')
ax.legend()
plt.show()
# PCA 降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print("原始数据形状:", X.shape)
print("降维后数据形状:", X_pca.shape)
# PCA 降维后的二维可视化
plt.figure(figsize=(8, 6))
for target in np.unique(y):
plt.scatter(X_pca[y == target, 0], X_pca[y == target, 1], label=data.target_names[target])
plt.xlabel('主成分 1')
plt.ylabel('主成分 2')
plt.title('PCA 降维后的 Iris 数据集')
plt.legend()
plt.show()


2732

被折叠的 条评论
为什么被折叠?



