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

参考

相关推荐
木头左11 分钟前
结合机器学习的Backtrader跨市场交易策略研究
人工智能·机器学习·kotlin
Coovally AI模型快速验证17 分钟前
3D目标跟踪重磅突破!TrackAny3D实现「类别无关」统一建模,多项SOTA达成!
人工智能·yolo·机器学习·3d·目标跟踪·无人机·cocos2d
荼蘼1 小时前
迁移学习实战:基于 ResNet18 的食物分类
机器学习·分类·迁移学习
THMAIL2 小时前
深度学习从入门到精通 - LSTM与GRU深度剖析:破解长序列记忆遗忘困境
人工智能·python·深度学习·算法·机器学习·逻辑回归·lstm
悠哉悠哉愿意2 小时前
【数学建模学习笔记】机器学习分类:随机森林分类
学习·机器学习·数学建模
玉木子3 小时前
机器学习(七)决策树-分类
决策树·机器学习·分类
悠哉悠哉愿意3 小时前
【数学建模学习笔记】机器学习分类:KNN分类
学习·机器学习·数学建模
ningmengjing_3 小时前
理解损失函数:机器学习的指南针与裁判
人工智能·深度学习·机器学习
nju_spy4 小时前
Kaggle - LLM Science Exam 大模型做科学选择题
人工智能·机器学习·大模型·rag·南京大学·gpu分布计算·wikipedia 维基百科
中國龍在廣州4 小时前
GPT-5冷酷操盘,游戏狼人杀一战封神!七大LLM狂飙演技,人类玩家看完沉默
人工智能·gpt·深度学习·机器学习·计算机视觉·机器人