Menu
CoddyTech

標準化

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

多くのモデルは、すべての特徴量が0を中心とし、標準偏差が1のときに最もよく学習します。標準化を行うと、各値はその列内でのzスコアになります。

5個のカボチャの重量(kg)と幅(cm):

標準偏差を単位とする定規上の2列の点:重量が8~40 kgのカボチャ5個と、幅が30~65 cmのカボチャ5個。それぞれの列は独自の平均値0を中心とし、すべて-1.6~1.6の範囲内にある

ブロードキャストにより、すべての列が一度に標準化されます。

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の間に収まります。

challenge icon

チャレンジ

中級

酪農場で、ほかの牛と異なる牛を見つけます。cowsの各行は1頭の牛を表し、featuresで名前が付けられた、牛乳(1日あたりのリットル数)、体重(kg)、年齢(年)を示します。プログラムは牛の位置kを読み取ります。

  1. standardize(X)を完成させます。チェック用の行は、その後[0. 0. 0.]と[1. 1. 1.]を出力します。
  2. 牛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のどこが際立っているか
quiz icon腕試し

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

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

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