基于Python的机器学习系列(23):主成分分析(PCA)

        在数据科学中,降维是一个重要的步骤,尤其是在需要可视化高维数据或提升模型性能时。主成分分析(PCA) 是一种经典的线性降维技术,旨在将数据从高维空间映射到低维空间,同时尽量保留数据的变异性。PCA 由Pearson(1901年)和Hotelling(1933年)提出,并在后来的许多技术中得到了广泛应用,如深度学习中的自编码器(autoencoders)。

问题定义

        PCA 的目标是将数据从高维空间(例如,每个样本有多个特征)映射到较低维度的空间。我们希望通过选择数据中最重要的几个方向(主成分),将数据投影到一个低维空间,这样可以在尽量减少信息损失的情况下简化数据。具体来说,PCA 通过寻找数据中方差最大的方向来达到这一目的,这样可以最大限度地保留数据的结构和分布信息。

PCA 方法

  1. 数据标准化:首先,对数据进行标准化处理,使数据的均值为0,方差为1。这一步是为了消除不同特征之间的尺度差异。
  2. 计算协方差矩阵:协方差矩阵描述了数据中各特征之间的线性关系。通过计算这个矩阵,可以了解不同特征之间的相关性。
  3. 特征分解:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。特征向量表示了数据的主要方向,特征值表示这些方向的重要性。
  4. 选择主成分:根据特征值的大小,选择前 $k$ 个特征向量,这些特征向量构成了新的特征空间。
  5. 数据转换:将原始数据投影到新特征空间,得到降维后的数据。

Python 实现

        下面的代码实现了 PCA 算法的基本步骤,并将降维后的数据可视化:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler

# 加载数据
data = load_iris()
X = data.data
y = data.target

# 标准化数据
scaler = StandardScaler()
X_std = scaler.fit_transform(X)

# 计算协方差矩阵
cov_matrix = np.cov(X_std.T)

# 特征值和特征向量
eig_vals, eig_vecs = np.linalg.eig(cov_matrix)

# 选择前两个主成分
sorted_indices = np.argsort(eig_vals)[::-1]
top_indices = sorted_indices[:2]
top_eig_vecs = eig_vecs[:, top_indices]

# 数据投影
X_pca = X_std.dot(top_eig_vecs)

# 可视化
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis', edgecolor='k')
plt.colorbar(scatter)
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA of Iris Dataset')
plt.show()

结语

        PCA 是一种强大的降维技术,它通过找到数据中最重要的方向(主成分)来减少数据的维度,同时保留尽可能多的信息。在我们之前讨论的模型方法中,例如决策树、Bagging、随机森林,它们主要用于监督学习任务,通过模型训练来进行预测。而 PCA 则属于无监督学习方法,通过降维来简化数据。在实际应用中,PCA 可以与这些监督学习模型结合使用,以便在高维数据中进行有效的模型训练和评估。

如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!

欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

谢谢大家的支持!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的Anthony

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值