鸢尾花数据集是一个著名的多变量数据集,通常用于测试分类算法。该数据集包含150个样本,每个样本有四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。这些特征存储在一个150x4的numpy数组中,其中行代表样本,列代表特征。本文将介绍如何使用Python和相关的机器学习库来加载这个数据集,并对其进行可视化和主成分分析(PCA)。
首先,需要加载鸢尾花数据集。这可以通过使用scikit-learn库中的datasets模块来实现。以下是加载数据集的代码示例:
from sklearn import datasets
iris = datasets.load_iris()
加载后,可以使用matplotlib库来创建一个散点图,以可视化数据集中的前两个特征(萼片长度和萼片宽度)。每个点代表数据集中的一个鸢尾花样本,颜色表示其类型(Setosa、Versicolour和Virginica)。通过这个二维散点图,可以初步观察到Setosa类型的鸢尾花,其萼片较短且宽,很容易通过这两个维度来识别。然而,Versicolour和Virginica类型的鸢尾花在这两个维度上仍然存在重叠。
为了更好地区分三种类型的鸢尾花,可以对数据集应用主成分分析(PCA),并绘制前三个PCA维度的鸢尾花。PCA将创建三个新特征,这些特征是原始四个特征的线性组合,并且这种转换最大化了方差。通过这种转换,可以使用第一个特征(即第一个特征值)来识别每个物种。以下是应用PCA并绘制三维散点图的代码示例:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
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)
ax.scatter(X_reduced[:, 0], X_reduced[:, 1], X_reduced[:, 2], c=iris.target, s=40)
ax.set_title("前三个PCA维度")
ax.set_xlabel("第一个特征向量")
ax.xaxis.set_ticklabels([])
ax.set_ylabel("第二个特征向量")
ax.yaxis.set_ticklabels([])
ax.set_zlabel("第三个特征向量")
ax.zaxis.set_ticklabels([])
plt.show()
通过这个三维散点图,可以更清晰地看到三种类型的鸢尾花在前三个PCA维度上的分布。PCA不仅帮助识别每个物种,还展示了数据的内在结构。这种分析方法在机器学习和数据科学领域非常有用,可以帮助理解数据的复杂性,并为进一步的数据分析和模型训练提供洞察。