Min-Maxスケーリング
CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 48/64。
最小最大スケーリングでは、すべての特徴量が公平に扱われます。各列で最小値は0、最大値は1になり、その他の値はその間に収まります。
年齢40歳、年収80,000ドルの人を追加してから、4つすべてをスケーリングします。
ブロードキャストを使うと、各列固有の最小値と範囲を使って、1行で処理できます。
X = np.array([[25, 52000],
[61, 53000],
[26, 55000],
[40, 80000]])
lows = X.min(axis=0)
highs = X.max(axis=0)
scaled = (X - lows) / (highs - lows)年齢も考慮されるようになりました。顧客0の最近傍は、もはや61歳の顧客ではありません。
1つの極端な値が1になり、残りの値を0付近に押し縮めるため、min-maxは外れ値のない列に適しています。
チャレンジ
中級焙煎業者は、似た方法で抽出されるコーヒーをマッチングします。beansの各行は1種類のコーヒーを表します。水温(C)、抽出時間(s)、カフェイン量(mg)です。プログラムは位置iとjを読み込み、スターターコードのdistance(a, b)は2つのサンプル間の距離を測定します。
beansを最小値・最大値でスケーリングします。Every column from 0 to 1:を出力し、続けてスケーリング後の表を小数点以下2桁で出力します。- 以下のように、スケーリング前後のそれらの距離を出力します。
ほかの3種類のコーヒーについて、位置0と1を指定した場合:
Every column from 0 to 1:
[[1. 1. 0.67]
[0.5 0.5 0. ]
[0. 0. 1. ]]
Coffees 0 and 1: 63.28 apart before scaling, 0.97 after自分で試してみよう
import numpy as np
# 2つのサンプル間の距離を返す(Why Scale Features より)
def distance(a, b):
return np.sqrt(((a - b) ** 2).sum())
# コーヒー1杯につき1行:湯温は C、抽出時間は秒、カフェイン量は mg で表す
beans = np.array([[88, 120, 60],
[96, 300, 30],
[86, 90, 70],
[94, 240, 120],
[90, 180, 90],
[84, 60, 50]])
i = int(input())
j = int(input())
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
機械学習のための統計のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ