射影
CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 25/51。
射影は影のように、各点を直線上にまっすぐ落とします。Too Many Featuresに登場した、平均を中心とするワインの双子を、2本の直線上に示します。
雲に沿って影が広がりの大部分を保っているため、ワインごとに1つの数値を使えば、2つ使った場合とほぼ同じことがわかります。
方向とは、二乗した値の和が1になる2つの数値です。たとえば (0.6, 0.8) のようなものです。影は重み付き和です:
centered = X - X.mean(axis=0)
shadow = centered[:, 0] * 0.6 + centered[:, 1] * 0.8
print(round(shadow.std(), 3))これは1.136を出力します。最適な方向は、最も広がりを保ちます。
チャレンジ
中級林業従事者は、松ぼっくりごとに長さと幅ではなく、1つの数値を求めたいと考えています。2つの方向のうち、どちらが松ぼっくりのばらつきをより多く保てるでしょうか。プログラムは、数値が2つずつの方向を2つ読み込みます。
spread_along(direction)を作成します。その方向への松ぼっくりの影の標準偏差を求めます。- 両方のばらつきを小数点以下3桁で出力します。
- 保持する方向を出力します。
ほかの松ぼっくりの場合:
Along [0.6, 0.8]: spread 2.104
Along [0.8, -0.6]: spread 0.412
Keep [0.6, 0.8]自分で試してみよう
import numpy as np
import pandas as pd
# 森林官が松ぼっくり70個の長さと幅をcm単位で測定した
cones = pd.read_csv("cones.csv")
X = np.column_stack([cones["length_cm"], cones["width_cm"]])
first = [float(input()), float(input())]
second = [float(input()), float(input())]
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師なし学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ