Menu
CoddyTech

射影

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

射影は影のように、各点を直線上にまっすぐ落とします。Too Many Featuresに登場した、平均を中心とするワインの双子を、2本の直線上に示します。

同じワインを、中心の周りに青い点で示した2つのグラフ。左は点群に沿った直線:オレンジ色の影はその直線に沿って大きく広がり、広がりは1.14。右は点群を横切る直線:影はまとまり、広がりは0.30

雲に沿って影が広がりの大部分を保っているため、ワインごとに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を出力します。最適な方向は、最も広がりを保ちます。

challenge icon

チャレンジ

中級

林業従事者は、松ぼっくりごとに長さと幅ではなく、1つの数値を求めたいと考えています。2つの方向のうち、どちらが松ぼっくりのばらつきをより多く保てるでしょうか。プログラムは、数値が2つずつの方向を2つ読み込みます。

  1. spread_along(direction)を作成します。その方向への松ぼっくりの影の標準偏差を求めます。
  2. 両方のばらつきを小数点以下3桁で出力します。
  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())]

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

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

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

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