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

参考

相关推荐
小墙程序员1 小时前
机器学习入门(八)模型评价与优化
机器学习
信息快讯1 小时前
【机器学习驱动的智能化电池管理技术与应用】
人工智能·机器学习
硅谷秋水4 小时前
π0.5:带开放世界泛化的视觉-语言-动作模型
人工智能·机器学习·计算机视觉·语言模型
搏博4 小时前
机器学习之三:归纳学习
人工智能·深度学习·学习·机器学习
伊织code7 小时前
SKLearn - Biclustering
机器学习·支持向量机·聚类·sklearn·biclustering
搏博8 小时前
专家系统的基本概念解析——基于《人工智能原理与方法》的深度拓展
人工智能·python·深度学习·算法·机器学习·概率论
yzx9910138 小时前
决策树随机深林
人工智能·python·算法·决策树·机器学习
winner88818 小时前
论文解读:迁移学习(A Survey on Transfer Learning)
人工智能·机器学习·迁移学习