2025.6.3 正規化【sklearn】
sklearn の MinMaxScaler で2Dデータの正規化(データを0~1の範囲にスケーリングする)を行うことができる。
code:minimaxscalaer01.py
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
import numpy as np
data1 = np.random.randn(20, 2)*1.3 # 正規分布で2Dのデータを用意
ms = MinMaxScaler() # 正規化を行うオブジェクトの生成
data1sc = ms.fit_transform(data1) # 正規化
# 結果のグラフ化
plt.scatter(data1:,0, data1:,1)
plt.scatter(data1sc:,0, data1sc:,1)
plt.grid()
plt.axhline(0, color='black', lw=0.5)
plt.axvline(0, color='black', lw=0.5)
plt.show()
結果:
https://scrapbox.io/files/683e7a4d658ecbcdc74c2469.png
計算式
$ \bar{x}_{ij} = \frac{x_{ij} - \min(X)}{\max(X) - \min(X)}
1D, 3Dのデータは処理できない。
code:続き.py
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
import numpy as np
ms = MinMaxScaler() # 正規化を行うオブジェクトの生成
# 1Dデータ
data2 = np.random.randn(5)
data2sc = ms.fit_transform(data2)
# 3Dデータ
data3 = np.random.randn(3,10,2)
data3sc = ms.fit_transform(data3)
1Dの結果:
ValueError: Expected 2D array, got 1D array instead:
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
3Dの結果:
ValueError: Found array with dim 3. MinMaxScaler expected <= 2.