主成分分析(PCA)是一种常用的数据降维技术,它能够将高维数据转换为低维数据,同时尽可能保留原始数据的信息。本文以著名的Iris数据集为例,展示如何使用PCA将四维特征空间降维到三维空间,并进行可视化展示。Iris数据集包含150个样本,每个样本有四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。
Iris数据集可以直接通过scikit-learn库中的load_iris
函数加载。加载后,可以得到一个包含数据、目标值、特征名称和目标名称的字典对象。
from sklearn.datasets import load_iris
iris = load_iris(as_frame=True)
print(iris.keys())
输出结果将显示数据集中包含的键,如'data'、'target'、'frame'等。
首先,使用seaborn库的pairplot
函数绘制Iris数据集中特征对的散点图。每个散点代表数据集中的一个样本,颜色表示样本的类别(Setosa、Versicolor和Virginica)。从图中可以观察到,Setosa类别的样本在萼片宽度和长度两个维度上与其他两类有明显区分,而Versicolor和Virginica类别在这两个维度上存在一定重叠。
import seaborn as sns
iris.frame["target"] = iris.target_names[iris.target]
sns.pairplot(iris.frame, hue="target")
从图中的对角线可以看出,花瓣宽度和花瓣长度是区分三类Iris花的最有区分度的特征。
接下来,对Iris数据集应用PCA降维,将其从四维特征空间转换为三维空间,并使用matplotlib库进行三维可视化。
import matplotlib.pyplot as plt
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([])
legend1 = ax.legend(scatter.legend_elements()[0], iris.target_names.tolist(), loc="upper right", title="Classes")
ax.add_artist(legend1)
plt.show()
通过PCA降维,得到了三个新的主成分,它们是原始四个特征的线性组合。这种转换最大化了数据的方差。从三维可视化图中可以看出,可以使用第一个主成分(即第一个特征向量)来区分不同的Iris花类别。
整个脚本的运行时间大约为2.949秒。