データ分析

Pythonでのデータ分析:スケーリングを行う

投稿日:

スケーリングとは何か

統計や機械学習で扱うデータ分析の前処理では"正規化"や"標準化"がよく使用されます。

"正規化"や"標準化"を行っておらず、体重、身長、年齢など複数の異なる特徴量をそのまま扱ってしまうと尺度が異なってしまうため、うまく学習できない場合があります。そこでデータをある基準に沿って変換し尺度を統一することが必要です。この尺度を統一することをスケーリングと呼びます。

スケーリングは"正規化"や"標準化"の種類があります。

"正規化"はMin-Max normalization"、標準化"はstandardizationもしくはz-score normalizationと呼ばれます。

このページで解説する内容

  • 正規化の特徴
  • 標準化の特徴
  • sikit-learnを使用した正規化のコード
  • sikit-learnを使用した標準化のコード

正規化の特徴

特徴量の値の範囲を一定の範囲におさめる変換です。主に[0, 1]か、[-1, 1]の範囲内に収めます。最大値と最小値が予め決まっている場合や、データの分布が一様分布である場合に有効です。しかし、外れ値が存在する場合はデータが偏ってしまうので注意が必要です。

標準化の特徴

データを平均0、標準偏差が1になるように変換する正規化法です。最大値と最小値が予め決まっていない場合や、外れ値のあるデータに対して有効です。

実際にsikit-learnにて提供されているデータ(ボストン市の住宅価格)をベースにスケーリングを行い結果を見てみます。

ソースコード

事前準備

sikit-learnにて提供されているデータ(ボストン市の住宅価格)を読み出し、data_dfに格納しています。今回読みだした値は住宅価格(単位は$1,000)です。

スケーリングを行っていない生データ

スケーリングなし

mean(平均値)・・・22.532806
std(標準偏差)・・・9.197104
min(最小値)・・・5.000000
max(最大値)・・・50.000000
となっています。

正規化を行ったデータ

sklearnのライブラリで提供されているMinMaxScalerを使用することで正規化することが出来ます。範囲として[-1,1]を指定しています。この範囲を変更することで任意の最小値、最大値に変換することが出来ます。データフレーム(ここではdata_df)をfitしてtransformを行うことで正規化されたデータを使用することが出来ます。
正規化2

mean(平均値)・・・-0.220764
std(標準偏差)・・・0.408760
min(最小値)・・・-1.000000
max(最大値)・・・1.000000
となっています。

指定された最小値、最大値の間でスケーリングされています。

また、単一のデータのみならず複数のデータについても同じ方法でスケーリングをすることが出来ます。

以下は別なデータを使用した場合の例です。

正規化

標準化を行ったデータ

sklearnのライブラリで提供されているStandardScalerを使用することで標準化することが出来ます。StandardScalerには引数がなく、そのまま使用することで平均 0 標準偏差 1にスケーリングされます。データフレーム(ここではdata_df)をfitしてtransformを行うことで標準化されたデータを使用することが出来ます。

標準化1

mean(平均値)・・・-4.247810e-16
std(標準偏差)・・・1.000990e+00
min(最小値)・・・-1.908226e+00
max(最大値)・・・2.989460e+00
となっています。

eがついているため見えにくいですが、-4.247810×10-16なのでほぼ平均が0となっています。

また、単一のデータのみならず複数のデータについても同じ方法でスケーリングをすることが出来ます。

以下は別なデータを使用した場合の例です。標準化

 

まとめ

統計や機械学習では複数の異なる特徴量をそのまま扱ってしまうと尺度が異なってしまうため、扱うデータ分析の前処理では"正規化"や"標準化"が必要です。sklearnのライブラリを使用することで簡単に"正規化"や"標準化"を実現をすることができるため是非活用してください。

-データ分析
-, ,

Copyright© AI人工知能テクノロジー , 2019 All Rights Reserved.