• 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年)など。  無料で、お試しもできますので安心です。
お時間ある方は下記リンクを覗いてみてはいかがでしょうか(*'ω'*)


閲覧数:100回0件のコメント