主成分分析 (PCA) 是一种无监督的机器学习技术。也许主成分分析最流行的用途是降维。但是,除了使用 PCA 作为数据准备技术之外,我们还可以使用它来帮助可视化数据。一张图片胜过千言万语。通过可视化数据,我们更容易获得一些见解并决定机器学习模型的下一步。
小普发布本次文章后,您将了解如何使用 PCA 将数据可视化,以及如何使用可视化来帮助确定降维参数。先赞后看是个好习惯。
完成本教程后,您将了解:
- 如何使用可视化高维数据
- 什么是PCA中的解释方差
- 从高维数据的PCA结果中直观地观察解释方差
让我们开始吧!
教程概述
本教程分为两部分;他们是:
- 高维数据散点图
- 可视化解释方差
高维数据散点图
可视化是从数据中获取洞察力的关键步骤。我们可以从可视化中了解到是否可以观察到模式,从而估计哪种机器学习模型是合适的。
用二维来描绘事物是很容易的。通常,带有 x 轴和 y 轴的散点图是二维的。用三维来描绘事物有点挑战性,但并非不可能。例如,在 matplotlib 中,可以绘制 3D。唯一的问题是在纸上或屏幕上,我们一次只能在一个视口或投影上查看 3D 绘图。在 matplotlib 中,这是由仰角和方位角控制的。用四、五个维度来描绘事物是不可能的,因为我们生活在一个三维世界,不知道这么高维度的事物会是什么样子。
这就是 PCA 等降维技术发挥作用的地方。我们可以将维度减少到两个或三个,以便我们可以对其进行可视化。让我们从一个例子开始。
我们从wine dataset开始,它是一个具有 13 个特征(即数据集为 13 维)和 3 个类的分类数据集。有 178 个样本:
from sklearn.datasets import load_wine
winedata = load_wine()
X, y = winedata['data'], winedata['target']
print(X.shape)
print(y.shape)
(178, 13)
(178,)
在 13 个特征中,我们可以选择任意两个并使用 matplotlib 绘制(我们使用c
参数对不同的类进行颜色编码):
...
import matplotlib.pyplot as plt
plt.scatter(X[:,1], X[:,2], c=y)
plt.show()
或者我们也可以选择任意三个并以 3D 方式显示:
...
ax = fig.add_subplot(projection='3d')
ax.scatter(X[:,1], X[:,2], X[:,3], c=y)
plt.show()
但这并没有揭示数据的大部分内容,因为大多数特征都没有显示。我们现在求助于主成分分析:
...
from sklearn.decomposition import PCA
pca = PCA()
Xt = pca.fit_transform(X)
plot = plt.scatter(Xt[:,0], Xt[:,1], c=y)
plt.legend(handles=plot.legend_elements()[0], labels=list(winedata['target_names']))
plt.show()
这里我们X
通过 PCA将输入数据转换为Xt
.我们只考虑包含最多信息的前两列,并以二维方式对其进行绘制。我们可以看到紫色类是比较有特色的,但是还是有一些重叠的。如果我们在 PCA 之前缩放数据,结果会有所不同:
...
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
pca = PCA()
pipe = Pipeline([('scaler', StandardScaler()), ('pca', pca)])
Xt = pipe.fit_transform(X)
plot = plt.scatter(Xt[:,0], Xt[:,1], c=y)
plt.legend(handles=pl