Menu
CoddyTech

Min-Maxスケーリング

CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 48/64。

最小最大スケーリングでは、すべての特徴量が公平に扱われます。各列で最小値は0、最大値は1になり、その他の値はその間に収まります。

年齢40歳、年収80,000ドルの人を追加してから、4つすべてをスケーリングします。

4人の顧客の年齢と収入を表にし、矢印の先にスケーリング後の同じ表を示したもの。各列で最小値は0.00、最大値は1.00になり、ほかの値はその間の値になっている。値が大きいほど濃く色付けされている

ブロードキャストを使うと、各列固有の最小値と範囲を使って、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歳の顧客ではありません。

0から1までの正方形上に点で示されたスケーリング済みの顧客。顧客0から線が引かれている。最も近いのは26歳の顧客で距離は0.11、61歳の顧客は1.00、年収80,000ドルの顧客は1.08

1つの極端な値が1になり、残りの値を0付近に押し縮めるため、min-maxは外れ値のない列に適しています。

challenge icon

チャレンジ

中級

焙煎業者は、似た方法で抽出されるコーヒーをマッチングします。beansの各行は1種類のコーヒーを表します。水温(C)、抽出時間(s)、カフェイン量(mg)です。プログラムは位置iとjを読み込み、スターターコードのdistance(a, b)は2つのサンプル間の距離を測定します。

  1. beansを最小値・最大値でスケーリングします。
  2. Every column from 0 to 1:を出力し、続けてスケーリング後の表を小数点以下2桁で出力します。
  3. 以下のように、スケーリング前後のそれらの距離を出力します。

ほかの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())

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

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

機械学習のための統計のすべてのレッスン

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