机器学习入门(七)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 数据来训练模型。

参考

相关推荐
max5006006 小时前
基于Meta Llama的二语习得学习者行为预测计算模型
人工智能·算法·机器学习·分类·数据挖掘·llama
王哥儿聊AI7 小时前
Lynx:新一代个性化视频生成模型,单图即可生成视频,重新定义身份一致性与视觉质量
人工智能·算法·安全·机器学习·音视频·软件工程
lisw058 小时前
连接蓝牙时“无媒体信号”怎么办?
人工智能·机器学习·微服务
jie*9 小时前
小杰机器学习(nine)——支持向量机
人工智能·python·机器学习·支持向量机·回归·聚类·sklearn
nju_spy9 小时前
南京大学 - 复杂结构数据挖掘(一)
大数据·人工智能·机器学习·数据挖掘·数据清洗·南京大学·相似性分析
Coovally AI模型快速验证9 小时前
从避障到实时建图:机器学习如何让无人机更智能、更安全、更实用(附微型机载演示示例)
人工智能·深度学习·神经网络·学习·安全·机器学习·无人机
没有梦想的咸鱼185-1037-166310 小时前
【遥感技术】从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类
pytorch·python·深度学习·机器学习·数据分析·cnn·transformer
钟爱蛋炒饭10 小时前
基于深度学习神经网络协同过滤模型(NCF)的视频推荐系统
python·神经网络·机器学习
悟乙己12 小时前
基于AWS Lambda的机器学习动态定价系统 CI/CD管道部署方案介绍
机器学习·ci/cd·aws
红苕稀饭66612 小时前
VideoChat-Flash论文阅读
人工智能·深度学习·机器学习