Menu
CoddyTech

特徴量をスケーリングする理由

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

どの顧客が新規顧客に最も似ていますか?多くのモデルはサンプル間の距離を測定します。各特徴量の差を二乗し、合計して、平方根を取ります。

年収52,000ドルの25歳と、年収53,000ドルの61歳を比較すると:

2人の顧客間の距離に各特徴量が加えるものを示す2本の棒:年齢は36歳差で1,296を加えるが、細すぎて見えないほどの棒。収入は1,000ドル差で1,000,000を加える長い棒

表全体については、axis=1で各行の二乗の合計を求め、.argmin()で最も近い行を見つけます。

a = np.array([25, 52000])  # 年齢、収入
X = np.array([[61, 53000],   # 61歳の人
              [26, 55000]])  # 収入が$55,000の26歳の人
dists = np.sqrt(((X - a) ** 2).sum(axis=1))
print(np.round(dists, 2))
print(dists.argmin())

これは次のように出力されます:

[1000.65 3000.  ]
0

61歳の人が最も近いです。ドルは数値が大きくなるため、$1,000は36年を上回ります。スケーリングされていない場合、最も大きな単位で決まります。

この章では、すべての機能を公平に取り上げます。

challenge icon

チャレンジ

中級

ある店舗では、洗濯機を価格($)、エネルギー消費量(年間kWh)、水の使用量(1回の洗濯あたりのリットル数)で比較し、これらをfeaturesに格納しています。プログラムは2台の洗濯機の位置iとjを読み込みます。次を出力してください。

  1. Squared gaps:各特徴量の差の二乗。
  2. Distance:小数第2位まで丸めた値。
  3. Dominant feature:差の二乗が最大の特徴量の名前。

別の2台の洗濯機の場合:

Squared gaps: [2500 6400    1]
Distance: 94.35
Dominant feature: energy

自分で試してみよう

import numpy as np

features = ["price", "energy", "water"]
# 洗濯機1台につき1行:価格はドル、電力消費量は年間kWh、水の使用量は洗濯1回あたりのリットル数
machines = np.array([[499, 160, 48],
                     [349, 210, 55],
                     [899, 120, 42],
                     [529, 250, 50],
                     [279, 230, 60],
                     [749, 140, 45]])
i = int(input())
j = int(input())

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

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

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

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