PCA
CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 26/51。
PCAは、最も広がりの大きい方向を見つけ、次にそれと直角をなす最適な方向を見つけます。このようにして見つかるのが主成分です。ワインの双子では、次のようになります。
各行を最初のいくつかの主成分に投影した影が、新しい特徴量になります。
from sklearn.decomposition import PCA
scaled = StandardScaler().fit_transform(X)
points = PCA(n_components=2).fit_transform(scaled)
print(X.shape, points.shape)13個すべてのワインの測定値について、これは (178, 13) (178, 2) と出力します。
まずスケーリングします。PCAはばらつきを追うため、数百単位のプロリンのように単位の大きな特徴量は、それだけで優位になります。
チャレンジ
中級水質検査所では、3つの泉から採取したボトルを検査し、それぞれ8項目を測定します。2Dマップで泉を見分けられるでしょうか? draw_springs(ax, points)は、任意の2D点を泉ごとに色分けします。
Xをスケーリングしてから、PCAで2つの成分に削減し、pointsに格納します。- 削減前後の特徴量の数を出力します。
draw_springsで点を描画し、表示します。
測定項目が6つの別の検査所の場合:
From 6 features to 2Coddyがあなたのマップを説明します。
自分で試してみよう
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
# 水の分析室:3つの水源から採取した120本のボトルそれぞれについて、8項目を測定
waters = pd.read_csv("waters.csv")
X = waters.drop(columns="spring")
# 水源ごとにグループ分けして2Dの点を散布図に描き、凡例を付ける
def draw_springs(ax, points):
for spring in ["alpine", "volcanic", "coastal"]:
rows = (waters["spring"] == spring).to_numpy()
ax.scatter(points[rows, 0], points[rows, 1], s=16, label=spring)
ax.legend()
fig, ax = plt.subplots()
ax.set_title("Spring Waters in 2D")
ax.set_xlabel("First component")
ax.set_ylabel("Second component")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師なし学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ