Python で数値のリストを正規化する
正規化とは、特定のデータを別のスケールに変換することを意味します。2つの値の間に収まるようにデータを再スケーリングします。ほとんどの場合、データは 0 から 1 の間で再スケーリングされます。別の目的でデータを再スケーリングします。たとえば、機械学習アルゴリズムは、データセットの値が小さい場合にパフォーマンスが向上します。
リストが{1,2,3}であり、0 と 1 のスケールを正規化すると、リストは {0, 0.5, 1}
になります。データを他のスケールに正規化することもできます。2 から 6 の間としましょう。したがって、正規化後にリスト{1,2,3}がある場合は、{2,4,6}になります。
正規化の公式
正規化がどのように機能するかを理解する。その式を見ていきます。すべての数値から最小値
を減算し、それを範囲
i-e:max-min で除算します。したがって、出力では、その特定の数値の正規化された値を取得します。
リストを正規化するには、2つの方法を使用できます。どちらも、sklearn
パッケージの前処理モジュールで利用可能な組み込み関数を使用できます。または、上記と同じ式で機能するロジックを作成することもできます。
Python sklearn
の MinMaxScaler
関数を使用して数値のリストを正規化する
MinMaxScaler()
という名前の組み込みメソッドは、sklearn
パッケージの前処理
モジュールで使用できます。1D NumPy
配列を作成し、それを関数に渡します。この関数を使用するには、NumPy
および sklearn
パッケージがインストールされている必要があります。
サンプルコード:
# python 3.x
import numpy as np
from sklearn import preprocessing
list = np.array([6, 1, 0, 2, 7, 3, 8, 1, 5]).reshape(-1, 1)
print("Original List:", list)
scaler = preprocessing.MinMaxScaler()
normalizedlist = scaler.fit_transform(list)
print("Normalized List:", normalizedlist)
出力:
Original List: [[6]
[1]
[0]
[2]
[7]
[3]
[8]
[1]
[5]]
Normalized List: [[0.75 ]
[0.125]
[0. ]
[0.25 ]
[0.875]
[0.375]
[1. ]
[0.125]
[0.625]]
ここで、正規化の範囲を指定するとします。この目的のために、MinMaxScaler()
で範囲
を指定します。デフォルトでは、範囲を指定しない場合は 0 と 1 になりますが、スケーリングの範囲を定義できます。この例では、範囲 0 と 3 を指定します。
サンプルコード:
# python 3.x
import numpy as np
from sklearn import preprocessing
list = np.array([6, 1, 0, 2, 7, 3, 8, 1, 5]).reshape(-1, 1)
print("Original List:", list)
scaler = preprocessing.MinMaxScaler(feature_range=(0, 3))
normalizedlist = scaler.fit_transform(list)
print("Normalized List:", normalizedlist)
出力:
Original List: [[6]
[1]
[0]
[2]
[7]
[3]
[8]
[1]
[5]]
Normalized List: [[2.25 ]
[0.375]
[0. ]
[0.75 ]
[2.625]
[1.125]
[3. ]
[0.375]
[1.875]]
Python で数値のリストを手動で正規化する
数値の完全なコードを記述することにより、数値のリストを手動で正規化することもできます。これは、正規化について上記で説明したのと同じ式で機能します。
サンプルコード:
list = [6, 1, 0, 2, 7, 3, 8, 1, 5]
print("Original List:", list)
xmin = min(list)
xmax = max(list)
for i, x in enumerate(list):
list[i] = (x - xmin) / (xmax - xmin)
print("Normalized List:", list)
出力:
Original List: [6, 1, 0, 2, 7, 3, 8, 1, 5]
Normalized List: [0.75, 0.125, 0.0, 0.25, 0.875, 0.375, 1.0, 0.125, 0.625]
I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.
LinkedIn