Menu
CoddyTech

説明分散

CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 27/51。

2つの成分ではどれだけ保持できたでしょうか?各成分は全体のばらつきに占める割合、つまり説明分散比を持ちます。13個すべてのワイン成分について:

ワインの13成分を表す棒は0.36からほぼ0まで小さくなり、オレンジ色の線はそれらを累積して0.36から1まで上昇します。成分8で破線の90%ラインを越えます

PCA() は n_components を指定しないと、すべての成分を保持します。np.cumsum は累積合計を返します。

pca = PCA().fit(scaled)
ratio = pca.explained_variance_ratio_
print(ratio[:3].round(3))
total = np.cumsum(ratio)
print((total < 0.9).sum() + 1)

これは [0.362 0.192 0.111] と 8 を出力します。合計がまだ0.9未満のものに加え、0.9を超えるものが1つあります。つまり、2Dのワインマップでは55%が保持されました。

challenge icon

チャレンジ

中級

チョコレートの研究室では、1本あたり9項目を測定します。ばらつきの90%を保持するには、いくつの成分が必要でしょうか? scaled の準備はできています。

  1. PCA() を当てはめ、各成分の寄与率を取得します。
  2. 90%に達する成分数を出力します。
  3. 寄与率を1、2、3...の位置に棒グラフで描画し、ラベルを each component とします。累積合計は marker="o" を使った折れ線で描画し、ラベルを running total とします。0.9の位置に灰色の破線を引き、凡例を表示します。グラフを表示します。

別の研究室の場合:

Components for 90%: 4

「各成分が保持するばらつき」というタイトルの、7成分のグラフ。0.42から小さくなる棒グラフ、1まで上昇し成分4で破線の0.9を超える累積合計、そして凡例

自分で試してみよう

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# チョコレートメーカーの研究室:150本のバーそれぞれについて9項目を測定
bars = pd.read_csv("chocolate.csv")
scaled = StandardScaler().fit_transform(bars)

fig, ax = plt.subplots()
ax.set_title("Spread Kept by Each Component")
ax.set_xlabel("Component")
ax.set_ylabel("Share of spread")

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師なし学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ