bookloveru2
機械学習のための【正規化】と【標準化】の違い
更新日:2021年11月29日
こんちは。乞食です。
統計学の書物を読んだり、機械学習の本を読んでいると、当たり前の様に【正規化】、【標準化】という言葉が出てきます。
特徴量のスケーリング(Feature Scaling)に使用します。
ググっても難しい表現が多いので、乞食(私です)でも解るように説明したいと思います。
定義
正規化…変数を0~1の値に収めること
標準化…変数を平均0、分散1に変換すること
これだけです。
https://qiita.com/toshi_machine/items/0d72ebfbd42bdd030d38より
今回は変数を[1, 10, 100, 1000, 10000]とします。
つまり変数は5つです(-ω-)/
では、正規化からいきます。
変数=1のとき(最小値)
上記の式に、変数Xiに1を代入してみます。
1(変数)-1(最小値)÷ 10000(最大値)-1(最小値)= 0
変数=10000のとき(最大値)
上記の式に、変数Xiに10000を代入してみます。
10000(変数)-1(最小値)÷ 10000(最大値)-1(最小値)= 1
これだけです。
見事に変数は0~1の値に収まりました。👇
変数 | 正規化した後の変数 |
1 | 0 |
10 | 0.0009 |
100 | 0.0099 |
1000 | 0.0999 |
10000 | 1 |
次に、標準化です。
標準化はExcelで計算します。

標準化された変数は、-0.5685~1.9907となりました。👇
変数 | 標準化した後の変数 |
1 | -0.5685 |
10 | -0.5662 |
100 | -0.5431 |
1000 | -0.3128 |
10000 | 1.9907 |
たったこれだけです。
正規化…変数を0~1の値に収めること
標準化…変数を平均0、分散1に変換すること
これで、特徴量のスケーリング(Feature Scaling)が出来ました。
最後に、上記と同じことをpythonで書いて終わります。
# @title 正規化と標準化を見る
import numpy as np
a = [1, 10, 100 , 1000, 10000]
import pandas as pd
a = np.array(a)
b = a.reshape(-1, 1)
print("【numpy array表記 行ベクトル】")
print( a)
print("【numpy reshape表記 列ベクトル】")
print(b)
# 正規化
from sklearn import preprocessing
mscaler = preprocessing.MinMaxScaler()
mscaler.fit(b)
seikika = mscaler.transform(b)
print("【正規化(0~1)へ収める】")
print(seikika)
# 標準化
sscaler = preprocessing.StandardScaler()
sscaler.fit(b)
hyoujyunnka = sscaler.transform(b)
print("【標準化 ~N(0,1)へ変換】")
print(hyoujyunnka)
結果です👇

以上、【正規化】と【標準化】の違いでした!(*'ω'*)
pythonでプログラミングがしたい!! pythonを学びたい!という方には、オンラインプログラミング教室『Aidemy アイデミー』がお勧めです。
ご自身でプログラム環境を用意する必要は無く、サイトへアクセスするだけです。
創業者は東京大学工学部卒の石川聡彦さん。
著書に『人工知能プログラミングのための数学がわかる本』(KADOKAWA/2018年)など。 無料で、お試しもできますので安心です。
お時間ある方は下記リンクを覗いてみてはいかがでしょうか(*'ω'*)。