1. 引言
主成分分析(PCA)是一种统计方法,它通过正交变换将一组可能相关的变量转换成一组线性不相关的变量,这些不相关变量称为主成分。PCA常用于降维、数据压缩和模式识别等领域。
喜欢的伙伴们点个关注哦~~❤❤❤
2. 理论基础
2.1 原理
PCA的目标是找到数据集中的最大方差方向,并沿着这些方向进行投影,以减少数据的维度,同时保留尽可能多的原始数据集的变异性。
2.2 步骤
- 标准化数据:使数据具有零均值和单位方差。
- 计算协方差矩阵:确定数据特征之间的关系。
- 计算特征值和特征向量:协方差矩阵的特征向量将定义主成分的方向,特征值将定义每个主成分的方差。
- 选择主成分:根据特征值的大小,选择前n个主成分。
- 转换到新的空间:将原始数据投影到这些主成分上。
3. Python实现
我们将使用Python的numpy
和matplotlib
库来实现PCA,并可视化结果。
3.1 导入库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA as skPCA
from sklearn.datasets import make_blobs
3.2 创建数据集
# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
3.3 可视化原始数据
plt.scatter(X[:, 0], X[:, 1], s=50)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Original Data')
plt.show()
3.4 PCA实现
# 使用sklearn的PCA
pca = skPCA(n_components=2) # 选择2个主成分
X_r = pca.fit_transform(X)
# 可视化降维后的数据
plt.scatter(X_r[:, 0], X_r[:, 1], s=50)
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('Reduced Data with PCA')
plt.show()
3.5 手动实现PCA
如果需要更深入理解PCA,可以手动实现:
# 标准化数据
mean = X.mean(axis=0)
X_std = (X - mean) / X.std(axis=0)
# 计算协方差矩阵
cov_matrix = np.cov(X_std, rowvar=False)
# 计算特征值和特征向量
eig_vals, eig_vecs = np.linalg.eig(cov_matrix)
# 选择前2个最大的特征值对应的特征向量
eig_pairs = [(np.abs(eig_vals[i]), eig_vecs[:, i]) for i in range(len(eig_vals))]
eig_pairs.sort(key=lambda x: x[0], reverse=True)
top_eig_vecs = np.array([eig_pairs[0][1], eig_pairs[1][1]])
# 转换到新的空间
X_pca = X_std.dot(top_eig_vecs)
4. 结论
PCA是一种强大的降维技术,可以有效地在保留数据集中大部分变异性的同时减少数据的维度。通过Python的sklearn
库,我们可以轻松地实现PCA,并利用matplotlib
库进行数据可视化。