Python

【Python】【機械学習】スケーリング(正規化)の範囲を変更する

MAX

通常、スケーリング(正規化)は[0, 1]の範囲で行うが、時にはスケーリング後の範囲を変更したい場合もある(かもしれない)

sklearnのMinMaxScalerを使用すれば、引数を変えるだけで計算できるが、sklearnを使うまでもない場合もある。

自分で計算したい時用。

スポンサーリンク

通常([0, 1])のMinMaxScaling

1# xi: i番目の値
2# x_max: xの最大値
3# x_min: xの最小値
4# x_norm: 正規化されたxの値
5
6x_norm = ( xi - x_min ) / ( x_max - x_min)

一番の基本形。

これで[0, 1]の範囲に収まる。

範囲を指定したMinMaxScaling

1# xi: i番目の値
2# x_max: xの最大値
3# x_min: xの最小値
4# sc_max: 正規化したい範囲の右端
5# sc_min: 正規化したい範囲の左端
6# x_norm: 正規化されたxの値
7x_norm = (xi - x_min) / (x_max - x_min) * (sc_max - sc_min) + sc_min

例えばsc_maxに-3, sc_minに3を設定すると[-3, 3]でスケーリングされる。

この計算を行ってくれるのが、sklearnのMinMaxScaler。

MinMaxScalerを用いたスケーリング

1from skleran.preprocessing import MinMaxScaler
2data = [ 1, 2, 3, 4, 5]
3arr = np.array(data).reshape(-1,1)
4
5# [0, 1]でスケーリングする場合(デフォルト)
6scaler = MinMaxScaler()
7scaler.fit(arr)
8data_scaled = scaler.transform(arr)
9
10# 範囲指定してスケーリングする場合
11sc_min = -1
12sc_max = 1
13scaler = MinMaxScaler( (sc_min, sc_max) )
14scaler.fit(arr)
15data_scaled = scaler.transform(arr)
16

sc_min, sc_maxを指定する場合はタプルで指定することに注意。

計算式としては、手動で実装したのと全く同じことを行うことになる。

データフレームに対して一括でスケーリングするなら、通常はsklearnのMinMaxScalerを使えば良いが、1行ずつ範囲を変えたい場合などは、手動で実装することになる。

スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました