標準化
CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 49/64。
多くのモデルは、すべての特徴量が0を中心とし、標準偏差が1のときに最もよく学習します。標準化を行うと、各値はその列内でのzスコアになります。
5個のカボチャの重量(kg)と幅(cm):
ブロードキャストにより、すべての列が一度に標準化されます。
pumpkins = np.array([[30, 60],
[8, 30],
[22, 55],
[40, 65],
[15, 40]])
z = (pumpkins - pumpkins.mean(axis=0)) / pumpkins.std(axis=0)
print(np.round(z.mean(axis=0), 2))
print(np.round(z.std(axis=0), 2))これは次のように出力されます:
[0. 0.]
[1. 1.]確認する前に丸めましょう。丸めていない場合、平均値が0でも、丸め誤差によって2.22044605e-17と表示されることがあります。
min-maxとは異なり、固定された範囲はありません。ほとんどの値は-2から2の間に収まります。
チャレンジ
中級酪農場で、ほかの牛と異なる牛を見つけます。cowsの各行は1頭の牛を表し、featuresで名前が付けられた、牛乳(1日あたりのリットル数)、体重(kg)、年齢(年)を示します。プログラムは牛の位置kを読み取ります。
standardize(X)を完成させます。チェック用の行は、その後[0. 0. 0.]と[1. 1. 1.]を出力します。- 牛
kのzスコアのうち、符号を無視して0から最も離れているものを見つけ、以下の形式で小数点以下2桁まで出力します。
別の牧場の牛の場合:
Column means: [0. 0. 0.]
Column stds: [1. 1. 1.]
Cow 2 stands out by weight: 1.76 std above the herd自分で試してみよう
import numpy as np
features = ["milk", "weight", "age"]
# 牛1頭につき1行:乳量は1日あたりのリットル数、体重はkg、年齢は年数
cows = np.array([[28, 610, 6],
[22, 540, 3],
[35, 680, 6],
[31, 590, 9],
[19, 650, 4],
[26, 520, 2],
[30, 600, 7]])
k = int(input())
# 各列を標準化したXを返す:平均0、標準偏差1
def standardize(X):
# 下の行を標準化の処理に置き換える
return X
# 下の3行は変更しないこと:あなたの関数をチェックするためのものです
z = standardize(cows)
print("Column means:", np.round(z.mean(axis=0), 2))
print("Column stds:", np.round(z.std(axis=0), 2))
# 下にコードを書く:牛kのどこが際立っているか
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
機械学習のための統計のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ