sklearn.preprocessing
の各メソッドを利用してデータセットのスケール処理を行えます。
スケール処理とは、標準化のようにデータ分布の性質を変えずにデータの値の増減を行うこと。
各メソッドは以下の通り。
StandardScaler
標準化、平均値を0、分散を1にする。
RobustScaler
中央値と四分位数でスケールを行う。
極端に他の値と異なるようなハズレ値を無視する。
MinMaxScaler
データセットを0〜1の値に収まるよう変換する。
Normalizer
データポイントを半径1の円(高次元なら球面)に投射する。ベクトルの長さではなく角度を問題とする時に用いる。
各処理の分布図
左が元のデータセット、右の散布図が各メソッドでスケール処理した時の散布図となる。
MinMaxScalerでのスケール処理の例
MinMaxScaler().fit(data_set)
でスケール比を学習します。
from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler cancer = load_breast_cancer() X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=1) scaler = MinMaxScaler() scaler.fit(X_train) # スケールを行う X_train_scaled = scaler.transform(X_train) print(X_train_scaled)
MinMaxScalerの場合、0〜1の間に収まる数値にスケールされる。
[[0.23044157 0.32157676 0.21940433 ... 0.31484671 0.30277942 0.09858323] [0.20062473 0.42116183 0.19452699 ... 0.06965208 0.34042973 0.06677161] [0.62232003 0.76929461 0.60403566 ... 0.56079917 0.19850187 0.07431457] ... [0.11619102 0.35726141 0.11077327 ... 0.17402687 0.17524147 0.17263545] [0.12963226 0.35311203 0.11706171 ... 0. 0.06780997 0.06919848] [0.21434995 0.59004149 0.21235575 ... 0.33251808 0.10782574 0.21172767]]
スケール処理の効果を確認
スケール処理の効果を確認するには、スケールすることによって精度に差が出るサポートベクタマシンで確認すると分かり易い。
from sklearn.svm import SVC X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0) svm = SVC(C=100) svm.fit(X_train, y_train) print("Test set accuracy: {:.2f}".format(svm.score(X_test, y_test)))
精度は出ない
Test set accuracy: 0.63
スケールしたデータポイントで学習する
scaler = MinMaxScaler() scaler.fit(X_train) X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test) svm.fit(X_train_scaled, y_train) print("Scaled test set accuracy: {:.2f}".format(svm.score(X_test_scaled, y_test)))
大幅に精度が向上し、スケール時の効果が確認できる
Scaled test set accuracy: 0.97
リンク