鸢尾花数据集是一个经典的机器学习数据集,它包含了三种鸢尾花(Setosa、Versicolour和Virginica)的四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。这些特征构成了一个四维特征空间,可以通过降维技术将其投影到二维平面上,以便更好地理解数据的分布和结构。
主成分分析(PCA)是一种无监督的降维技术,它通过寻找数据中的主要变化方向(即主成分)来减少数据的维度。在鸢尾花数据集上应用PCA,可以找到两个主成分,它们解释了数据中大部分的方差。通过将数据投影到这两个主成分上,可以得到一个二维的可视化表示,从而观察不同种类鸢尾花在这两个主成分上的分布情况。
在PCA的实现中,首先需要从数据集中提取特征和标签。然后,使用PCA类来拟合数据,并将其转换为两个主成分。这个过程可以通过以下Python代码实现:
from sklearn.decomposition import PCA
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
pca = PCA(n_components=2)
X_r = pca.fit(X).transform(X)
通过上述代码,可以得到一个二维的数据表示,其中每个点代表一个鸢尾花样本,点的位置由两个主成分的值决定。这种表示可以帮助直观地看到不同种类鸢尾花在特征空间中的分布情况。
与PCA不同,线性判别分析(LDA)是一种有监督的降维技术。它不仅考虑数据的变化方向,还考虑了数据的类别标签。LDA的目标是找到一个最佳的投影方向,使得不同类别的数据在投影后尽可能地分开,同时同类数据尽可能地聚集在一起。
在鸢尾花数据集上应用LDA,同样需要提取特征和标签。然后,使用LDA类来拟合数据,并将其转换为两个判别成分。这个过程可以通过以下Python代码实现:
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components=2)
X_r2 = lda.fit(X, y).transform(X)
通过LDA得到的二维数据表示,可以更清晰地看到不同种类鸢尾花之间的界限。这种表示对于分类任务特别有用,因为它可以提供更直观的类别区分信息。
为了更直观地比较PCA和LDA在鸢尾花数据集上的效果,可以将降维后的数据进行可视化。通过绘制散点图,可以观察到不同种类鸢尾花在二维平面上的分布情况。以下是一个简单的Python代码示例,用于绘制PCA和LDA的可视化结果:
import matplotlib.pyplot as plt
colors = ["navy", "turquoise", "darkorange"]
lw = 2
plt.figure()
for color, i, target_name in zip(colors, [0, 1, 2], iris.target_names):
plt.scatter(X_r[y == i, 0], X_r[y == i, 1], color=color, alpha=0.8, lw=lw, label=target_name)
plt.legend(loc="best", shadow=False, scatterpoints=1)
plt.title("PCA of IRIS dataset")
plt.figure()
for color, i, target_name in zip(colors, [0, 1, 2], iris.target_names):
plt.scatter(X_r2[y == i, 0], X_r2[y == i, 1], alpha=0.8, color=color, label=target_name)
plt.legend(loc="best", shadow=False, scatterpoints=1)
plt.title("LDA of IRIS dataset")
plt.show()
通过上述代码,可以得到两个散点图,分别展示了PCA和LDA在鸢尾花数据集上的降维效果。在PCA的图中,可以看到不同种类的鸢尾花在两个主成分上的分布情况;而在LDA的图中,可以看到不同种类的鸢尾花在两个判别成分上的分布情况,且不同种类之间的界限更加明显。