机器学习八———主成分分析

文章详细介绍了主成分分析(PCA)作为数据降维技术的基本原理,包括其优点如降维、去相关性、解释性和可视化,以及缺点如线性假设、信息损失和对异常值敏感。并通过实际代码展示了如何在人脸识别任务中使用PCA进行预处理。
摘要由CSDN通过智能技术生成

定义:

主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维技术,它通过线性变换将原始特征空间映射到一个新的特征空间,新特征空间中的特征被称为主成分。PCA的目标是通过保留数据中的主要信息来减少特征的维度,从而降低数据的复杂性和减少噪声的影响。 在PCA中,第一主成分是数据中方差最大的方向,第二主成分和第一主成分正交且方差次大,之后的主成分以此类推。因此,PCA将原始数据投影到重要方向上,并且丢弃对方差贡献较小的方向,从而实现数据的降维处理。

特点:

主成分分析(PCA)作为一种常用的数据降维技术,具有以下优缺点:

优点:

1. 降维:PCA通过提取数据中的主要特征来减少数据的维度,同时尽可能保留原始数据的信息,有利于简化模型和减少过拟合。

2. 去相关性:PCA能够将原始特征之间的相关性减少到较低甚至是零,有利于消除数据特征之间的多重共线性。

3. 解释性:PCA生成的主成分是原始特征的线性组合,这些主成分通常可以更好地解释数据的变化。

4. 可视化:PCA可以帮助数据的可视化分析,将高维数据转化为低维数据更容易进行可视化展示。

缺点:

1. 数据要求线性:PCA通常假定数据是线性相关的,对于非线性关系不适用。对于非线性数据,需要使用其他的非线性降维方法。

2. 信息损失:降维过程中会丢失一些数据的信息,尤其是在去除方差较小的主成分时,会带来信息丢失的问题。

3. 受异常值影响:PCA对异常值较为敏感,异常值可能对主成分的计算产生较大影响。

4. 非稳定性:PCA的结果对数据集的特定分布较为敏感,对于不同的数据集会有不同的效果,因此在应用时需要谨慎考虑。

实现步骤:

1. 收集数据集:收集包含多个变量(特征)的数据集,以便进行主成分分析。

2. 标准化数据:对数据集中的特征进行标准化处理,使其具有相似的尺度和方差。

3. 计算协方差矩阵:通过计算数据集中各个特征之间的协方差,得到协方差矩阵。

4. 计算特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。

5. 选择主成分:根据特征值的大小,选择最重要的特征向量作为主成分。

6. 构建投影矩阵:利用选择的主成分构建投影矩阵,将原始数据集投影到主成分空间中。

7. 转换数据集:利用投影矩阵将原始数据集转换为主成分空间中的数据集,即得到主成分得分矩阵。

8. 解释主成分:分析各个主成分的特征向量,以解释主成分所代表的特征。

9. 应用主成分分析:利用主成分分析结果进行数据降维、可视化、聚类等分析应用。

实战

运行代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_lfw_people
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 加载人脸数据集
lfw_people = fetch_lfw_people(min_faces_per_person=70, resize=0.4)
data = lfw_people.data
target = lfw_people.target

# 可视化原始图像
fig, axes = plt.subplots(3, 8, figsize=(15, 6), subplot_kw={'xticks':[], 'yticks':[]})
for i, ax in enumerate(axes.flat):
    ax.imshow(data[i].reshape(50, 37), cmap='gray')

# 标准化数据
mean = np.mean(data, axis=0)
std = np.std(data, axis=0)
data_normalized = (data - mean) / std

# 进行PCA
n_components = 150  # 设置主成分的数量
pca = PCA(n_components=n_components)
pca.fit(data_normalized)
projected = pca.transform(data_normalized)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(projected, target, test_size=0.25, random_state=42)

# 在训练集上训练SVM分类器
clf = SVC()
clf.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("分类准确率:", accuracy)

plt.show()

运行结果

人脸图:

准确率:

总结

总体上,主成分分析通过降维帮助我们提取了特征,并且减轻了数据中的噪声。在后续的机器学习任务中,PCA作为一个预处理步骤,可以帮助提高模型的泛化能力并加速训练过程。然而,需要留意的是,PCA也可能带来一定的信息损失,而且对数据特征的假设条件也需要慎重考虑。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值