注意
转到末尾 下载完整示例代码,或通过 JupyterLite 或 Binder 在浏览器中运行此示例
鸢尾花数据集上的主成分分析 (PCA)#
本示例展示了在鸢尾花数据集上应用一种众所周知的分解技术,即主成分分析 (PCA)。
该数据集由4个特征组成:萼片长度、萼片宽度、花瓣长度、花瓣宽度。我们使用 PCA 将这4个特征空间投影到3维空间中。
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause
加载鸢尾花数据集#
鸢尾花数据集作为 scikit-learn 的一部分直接可用。可以使用 load_iris
函数加载。使用默认参数,将返回一个 Bunch
对象,其中包含数据、目标值、特征名称和目标名称。
dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])
鸢尾花数据集特征对的图#
首先绘制鸢尾花数据集的特征对。
import seaborn as sns
# Rename classes using the iris target names
iris.frame["target"] = iris.target_names[iris.target]
_ = sns.pairplot(iris.frame, hue="target")

每个散点图上的每个数据点代表数据集中150朵鸢尾花中的一朵,颜色表示它们各自的类型(山鸢尾、变色鸢尾和维吉尼亚鸢尾)。
您已经可以看到山鸢尾类型的一个模式,它很容易根据其短而宽的萼片进行识别。仅考虑萼片宽度和长度这两个维度,变色鸢尾和维吉尼亚鸢尾类型之间仍然存在重叠。
图的对角线显示了每个特征的分布。我们观察到花瓣宽度和花瓣长度是这三种类型最具区分度的特征。
绘制 PCA 表示#
让我们对鸢尾花数据集应用主成分分析 (PCA),然后根据前三个 PCA 维度绘制鸢尾花。这将使我们能够更好地区分这三种类型!
import matplotlib.pyplot as plt
# unused but required import for doing 3d projections with matplotlib < 3.2
import mpl_toolkits.mplot3d # noqa: F401
from sklearn.decomposition import PCA
fig = plt.figure(1, figsize=(8, 6))
ax = fig.add_subplot(111, projection="3d", elev=-150, azim=110)
X_reduced = PCA(n_components=3).fit_transform(iris.data)
scatter = ax.scatter(
X_reduced[:, 0],
X_reduced[:, 1],
X_reduced[:, 2],
c=iris.target,
s=40,
)
ax.set(
title="First three PCA dimensions",
xlabel="1st Eigenvector",
ylabel="2nd Eigenvector",
zlabel="3rd Eigenvector",
)
ax.xaxis.set_ticklabels([])
ax.yaxis.set_ticklabels([])
ax.zaxis.set_ticklabels([])
# Add a legend
legend1 = ax.legend(
scatter.legend_elements()[0],
iris.target_names.tolist(),
loc="upper right",
title="Classes",
)
ax.add_artist(legend1)
plt.show()

PCA 将创建3个新特征,它们是4个原始特征的线性组合。此外,这种变换使方差最大化。通过这种变换,我们看到我们可以仅使用第一个特征(即第一个特征向量)来识别每个物种。
脚本总运行时间: (0 分 2.021 秒)
相关示例