sklearn StandardScaler で標準化の効果を確かめる-python

書籍 Python機械学習プログラミング 達人データサイエンティストによる理論と実践 の中に、特徴量の尺度の話がでてきました。特徴量の尺度を揃えなさい、揃え方には正規化と標準化があり、多くの機械学習アルゴリズムでは標準化が実用的、といった内容でした。ちょっと試してみます。

- 目次 -

スポンサーリンク

標準化と正規化

標準化と正規化の計算式はこうなります。

標準化の式

\(x_{std}^{(i)}= \large{\frac{x^{(i)}- \mu}{\sigma}}\)

\(\mu\):平均    \(\sigma\):標準偏差

正規化の式

\(x_{norm}^{(i)}= \large{\frac{x^{(i)}-x_{min}}{x_{max}-x_{min}}} \)

\(x_{max}\):最大値    \(x_{min}\):最小値

scikit-learn で

sklearn の StandardScalerMinMaxScaler がそれぞれ 標準化正規化 のモジュールです。主に使うメソッドは次の 3 つです。

  • fit
    パラメータ(平均や標準偏差 etc)計算
  • transform
    パラメータをもとにデータ変換
  • fit_transform
    パラメータ計算とデータ変換をまとめて実行

テスト

2次元のデータで試してみます。2次元正規分布の乱数を 50 個用意し、標準化、正規化を行っています。

結果

実行すると以下の2つの図が表示されます。上が標準化、下が正規化の結果です。
が元データ、 が標準化後のデータ、 が正規化後のデータ)

標準化、正規化

標準化の結果、平均が (0,0)へ移動し、標準偏差が x軸、y軸とも 1 になっています。

正規化のほうは、全データが x軸、y軸とも 0~1 に収まっています。

標準化の効果を確認

以前、こちら の記事で TensorFlow を使ってロジスティック回帰を実行してみました。この時はデータを標準化して実行したのですが、ここでは試しに標準化しない場合はどうなるのか見てみます。下図、赤と青の2種類のデータをうまく分割する線を探しています。

標準化 あり

標準化 あり

標準化 なし

標準化 なし

標準化を行った上図のほうがきれいにデータを分割できています。

ついでに標準化と正規化の効果を比較

標準化(再掲)

標準化 あり

正規化

正規化

微妙に違います。どっちがいいのか・・・
とりあえず、学習データをうまく分割できたのは標準化したほうです。検証データを別に用意して試せばどうなるかちょっと判りませんが。

スポンサーリンク
その他の記事

コメントはお気軽に