目次
機械学習の話に頻繁に登場する「標準化」と「正規化」
機械学習関係の勉強をすると「標準化」と「正規化」と言う言葉が頻繁にでてきます。
この2つの言葉がどう違うのか、どのように使い分けるべきなのか・・。
これを整理してちゃんと理解したい・・というのが今回の目的です。
正規化という言葉は、いろんなところで使われてます。
例えば、「ベクトル」にも「パターン認識」にも「数値」にも、それぞれの「正規化」が存在しますが、正規化という言葉が示すものは微妙に異なります。
ベクトルの正規化とは、ベクトルの方向は維持しつつ大きさを「1」にする事です。
パターン認識の正規化とは、対象の特徴をあらかじめ決められた基準に沿うように加工することです。
数量の正規化とは、数量を代表値で割るなどして次元をそろえて、互いに比較できるようにすることです。
でも、これはある意味当然なので、別に違和感はありません。
ライブラリによって正規化と標準化が混在する現実
違和感があるのは、機械学習のプログラミングで使うライブラリによって、同じ意味合いのものを違う言葉で表現しているものがあることです。
例えば。
Scikit-learnライブラリでは、StandardScaler と MinMaxScaler がそれぞれ 標準化(standardization) と 正規化(normalization) のモジュールだという説明があります。
そこでは、標準化は「平均が0、標準偏差が1になるようにデータを加工(スケーリング)」し、正規化は「最低が0、最高が1になるようにデータを加工(スケーリング)する」モジュールと説明されています。
ディープラーニングの「バッチノーマライゼーション(Batch Normalization)」という手法も「平均が0、分散が1になるようにデータを加工」します。
平均が0、分散が1になるようにデータを加工・・という全く同じ意味合いのことをするのに、scikit-learnの場合は「標準化」で、ディープラーニングでは正規化(normalization)とか正則化という言葉で説明されているわけです。
このへんが、自分らみたいな文系人間には混乱の原因になります。
結局、どちらを使ってもいいよ・・が結論なのか
調べてみると、標準化(standardization) と 正規化(normalization)の違いというのは、英語圏でもとても多い質問みたいです。
こんな感じで。
そこでも明確な結論はでていません。
例えば。
通常は、正規化とは値の範囲が「0.0〜1.0に正規化される」ことを意味して、標準化とは値の範囲が「標準化」され、その値がその平均からどれだけの標準偏差であるかを測定することを意味するが、誰もがそれに同意するわけではないので、定義を使用する前に説明することをお勧めします。
みたいな感じになってます。
他にもいろいろググってみましたが、概ね、行き着く先は同じです。
一般的には「こうだ」という意味はあるけど絶対的な定義ではありません。
だから、使うときにきちんと説明をしていれば、どちらを使っても間違いではないよ・・って感じが、結論というか、暗黙の了解事項・・みたいな感じですね。
つまり。
標準化と呼ばれる時はこうだ。
正規化と呼ばれる時ならこうだ。
そんな風に一般化した正解はないから、どっちを使ってもいいみたい。
そんなグダグダな結論になりました。
なんだかなあ・・です。
ではでは。