机器学习入门(七)PCA

在之前的文章中,我们做了很多示例,比如房价预测、鸢尾花分类等。这些示例的训练模型的维度都不高,但是在实际运用中,模型的维度一般都在 100 以上,有的甚至达到了亿级。

像这种高维的模型会带来很多的问题,比如

  • 数据的多重共线性:特征属性之间存在着相互关联关系。多重共线性会导致解的空间不稳定, 从而导致模型的泛化能力弱;
  • 高纬空间样本具有稀疏性,导致模型比较难找到数据特征;
  • 过多的变量会妨碍模型查找规律;
  • 仅仅考虑单个变量对于目标属性的影响可能忽略变量之间的潜在关系。
  • 计算量激增
  • 无法可视化等。

因此我们需要数据进行降维操作。

降维

降维是指通过保留一些比较重要的特征,去除一些冗余的特征,减少数据特征的维度。

常用的降维算法有:PCA(主成分分析)、LDA(线性判别分析)、MDS(多维尺度变换)等。这里将介绍如何使用 PCA 来进行数据的降维。

在PCA中,我们要做的是找到一个方向向量(Vector direction),当我们把所有的数据 都投射到该向量上时,我们希望投射平均均方误差能尽可能地小。

需要注意:主成分分析与线性回归是两种不同的算法。主成分分析最小化的是投射误差(Projected Error),而线性回归尝试的是最小化预测误差。线性回归的目的是预测结果,而主成分分析 不作任何预测。下图是线性回归的计算示意图,可以看到两者是不同的。

使用 PCA 降维

我们可以使用 sklearn 库来实现 PCA 降维,代码示例如下:

ini 复制代码
# 数据标准化处理,让新的数据均值是0,标准差是1
from sklearn.preprocessing import StandardScaler
x_norm = StandardScaler().fit_transform(x)
# 进行与原数据等维度的PCA,查看各主成分的方差比例
from sklearn.decomposition import PCA
pca = PCA(n_components=4)
x_pca = pca.fit_transform(x_norm)
var_ratia = pca.explained_variance_ratio_
# 可视化方差比例
fig2 = plt.figure(figsize=(20,5))
plt.bar([1, 2, 3, 4], var_ratia)
plt.xticks([1, 2, 3, 4], ['PC1', 'PC2', 'PC3', 'PC4'])
plt.ylabel('variance ratio of each PC')
plt.show()

效果如下图所示

从图中可以看到后面的数据相关程度比较低,只保留前面的两项就可以了。代码示例如下:

ini 复制代码
pca = PCA(n_components=2)
x_pca = pca.fit_transform(x_norm)
# 可视化数据
fig3 = plt.figure(figsize=(10, 10))
setosa=plt.scatter(x_pca[:, 0][y==0], x_pca[:, 1][y==0])
versicolor=plt.scatter(x_pca[:, 0][y==1], x_pca[:, 1][y==1])
virginica=plt.scatter(x_pca[:, 0][y==2], x_pca[:, 1][y==2])
plt.legend((setosa, versicolor, virginica), ('setosa', 'versicolor', 'virginica'))
plt.show()

把数据降维到二维(之前是四维)后,我们就可以可视化数据了,如下图所示:

同时也可以拿 PCA 处理后的 x_pca 数据来训练模型。

参考

相关推荐
Captain_Data30 分钟前
Python机器学习sklearn线性模型完整指南:LinearRegression/Ridge/Lasso详细代码注释
python·机器学习·数据分析·线性回归·sklearn
nihao5611 小时前
机器学习:阈值与混淆矩阵
人工智能·机器学习·矩阵
鱼骨不是鱼翅1 小时前
机器学习(1)-----基础概念
人工智能·机器学习
接着奏乐接着舞。2 小时前
机器学习经验总结整理
人工智能·机器学习
AEIC学术交流中心3 小时前
【快速EI检索 | ACM出版】第六届物联网与机器学习国际会议 (IoTML 2026)
物联网·机器学习
handsomestWei4 小时前
scikit-learn数据预处理模块
python·机器学习·scikit-learn
计算机毕业设计指导4 小时前
基于机器学习和深度学习的恶意WebURL检测系统实战详解
人工智能·深度学习·机器学习·网络安全
w_t_y_y4 小时前
机器学习常用的python包(二)工具箱scikit-learn
python·机器学习·scikit-learn
志栋智能4 小时前
超自动化巡检:实现运维“事前预防”的关键拼图
大数据·运维·网络·人工智能·机器学习·自动化
枫叶林FYL4 小时前
【自然语言处理 NLP】7.2 红队测试与对抗鲁棒性(Red Teaming & Adversarial Robustness)
人工智能·算法·机器学习