はじめに
この実験では、Iris データセットに対して、2 つの一般的な次元削減アルゴリズムである主成分分析 (Principal Component Analysis: PCA) と線形判別分析 (Linear Discriminant Analysis: LDA) の性能を比較します。Iris データセットには、4 つの属性(花弁の長さ、花弁の幅、がく片の長さ、がく片の幅)を持つ 3 種類の Iris の花が含まれています。
VM のヒント
VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み完了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション終了後にフィードバックを提供してください。すぐに問題を解決いたします。
データセットの読み込み
まず、scikit-learn の組み込み関数 load_iris() を使って Iris データセットを読み込む必要があります。
import matplotlib.pyplot as plt
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
target_names = iris.target_names
PCA を実行する
次に、データセットに対して主成分分析 (Principal Component Analysis: PCA) を実行し、データ内の最も分散をもたらす属性の組み合わせを特定します。最初の 2 つの主成分上に異なるサンプルをプロットします。
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_r = pca.fit(X).transform(X)
## 各成分によって説明される分散の割合
print("Explained variance ratio (first two components): %s" % str(pca.explained_variance_ratio_))
plt.figure()
colors = ["navy", "turquoise", "darkorange"]
lw = 2
for color, i, target_name in zip(colors, [0, 1, 2], 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.show()
LDA を実行する
次に、クラス間で最も分散をもたらす属性を特定するために、データセットに対して線形判別分析 (Linear Discriminant Analysis: LDA) を実行します。PCA とは異なり、LDA は既知のクラスラベルを使用する教師付き手法です。
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components=2)
X_r2 = lda.fit(X, y).transform(X)
plt.figure()
for color, i, target_name in zip(colors, [0, 1, 2], 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 の結果を比較します。Iris データセットの 3 つのクラスを分離する際に、LDA の方が PCA よりも良好な性能を発揮することがわかります。
まとめ
この実験では、scikit-learn を使って Iris データセットに対して主成分分析 (Principal Component Analysis: PCA) と線形判別分析 (Linear Discriminant Analysis: LDA) を行う方法を学びました。また、これら 2 つの次元削減アルゴリズムの性能を比較し、データセット内の異なるクラスを分離する際には LDA の方が PCA よりも良好な性能を発揮することがわかりました。