鸢尾花数据集(Iris dataset)是机器学习领域中非常著名的一个多变量数据集,它包含了150个样本,每个样本有4个特征,分别代表鸢尾花萼片和花瓣的长度和宽度。这个数据集通常用于测试分类算法的性能。在本页面中,将使用主成分分析(PCA)方法对数据集进行降维,并在三维空间中进行可视化展示。
主成分分析(PCA)是一种常用的数据降维技术,它通过正交变换将原始数据转换为一组线性不相关的变量,这些变量称为主成分。在PCA中,第一个主成分具有最大的方差(即数据在该方向上的变化最大),每个后续的主成分在与前面的主成分正交的同时,尽可能地保留最大的方差。通过这种方式,PCA可以有效地减少数据的维度,同时保留最重要的信息。
在本例中,将使用Python的matplotlib库和sklearn库来实现PCA降维和数据可视化。首先,需要导入必要的库,并加载鸢尾花数据集。然后,创建一个PCA对象,并将其应用于数据集,以获得降维后的数据。最后,使用matplotlib的3D绘图功能,在三维空间中展示降维后的数据。
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, decomposition
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 创建PCA对象,设置主成分数量为3
pca = decomposition.PCA(n_components=3)
pca.fit(X)
X_pca = pca.transform(X)
# 创建3D绘图
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
# 绘制降维后的数据点
for name, label in [('Setosa', 0), ('Versicolour', 1), ('Virginica', 2)]:
ax.text3D(X_pca[y == label, 0].mean(), X_pca[y == label, 1].mean() + 1.5, X_pca[y == label, 2].mean(), name,
horizontalalignment='center', bbox=dict(alpha=0.5, edgecolor='w', facecolor='w'))
# 绘制数据点
ax.scatter(X_pca[:, 0], X_pca[:, 1], X_pca[:, 2], c=y, cmap=plt.cm.nipy_spectral, edgecolor='k')
# 隐藏坐标轴标签
ax.set_xticks([])
ax.set_yticks([])
ax.set_zticks([])
# 显示图形
plt.show()
在上述代码中,首先导入了matplotlib.pyplot和numpy库,以及sklearn库中的datasets和decomposition模块。然后,加载了鸢尾花数据集,并将其特征数据存储在变量X中,标签数据存储在变量y中。接下来,创建了一个PCA对象,并将其应用于数据集,以获得降维后的数据X_pca。
在绘制3D图形时,首先创建了一个图形对象fig,并为其添加了一个3D子图ax。然后,遍历了鸢尾花数据集中的每个类别,并在3D空间中绘制了该类别的中心点。最后,使用scatter函数绘制了降维后的数据点,并隐藏了坐标轴标签,以获得更清晰的视觉效果。
通过上述代码,可以在三维空间中直观地观察鸢尾花数据集中不同类别之间的分布情况。可以看到,Setosa类别与其他两个类别有明显的区分,而Versicolour和Virginica类别则有一定的重叠。这表明PCA降维方法能够有效地保留数据中的重要信息,并有助于更好地理解数据集的结构。