注意
前往結尾以下載完整的範例程式碼。或透過 JupyterLite 或 Binder 在您的瀏覽器中執行此範例
Iris 資料集的主成分分析 (PCA)#
此範例展示了一種著名的分解技術,稱為對 Iris 資料集進行主成分分析 (PCA)。
此資料集由 4 個特徵組成:萼片長度、萼片寬度、花瓣長度、花瓣寬度。我們使用 PCA 將這 4 個特徵空間投影到 3 維空間中。
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause
載入 Iris 資料集#
Iris 資料集可直接作為 scikit-learn 的一部分使用。可以使用 load_iris
函數載入。使用預設參數,會傳回一個 Bunch
物件,其中包含資料、目標值、特徵名稱和目標名稱。
dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])
Iris 資料集特徵對的繪圖#
讓我們先繪製 Iris 資料集的特徵對。
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 表示#
讓我們對 Iris 資料集應用主成分分析 (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.878 秒)
相關範例