主成分分析(PCA)详解与Python实现

1. 引言

主成分分析(PCA)是一种统计方法,它通过正交变换将一组可能相关的变量转换成一组线性不相关的变量,这些不相关变量称为主成分。PCA常用于降维、数据压缩和模式识别等领域。

喜欢的伙伴们点个关注哦~~❤❤❤

2. 理论基础

2.1 原理

PCA的目标是找到数据集中的最大方差方向,并沿着这些方向进行投影,以减少数据的维度,同时保留尽可能多的原始数据集的变异性。

2.2 步骤

  1. 标准化数据:使数据具有零均值和单位方差。
  2. 计算协方差矩阵:确定数据特征之间的关系。
  3. 计算特征值和特征向量:协方差矩阵的特征向量将定义主成分的方向,特征值将定义每个主成分的方差。
  4. 选择主成分:根据特征值的大小,选择前n个主成分。
  5. 转换到新的空间:将原始数据投影到这些主成分上。

3. Python实现

我们将使用Python的numpymatplotlib库来实现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库进行数据可视化。

 

 

 

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值