こんにちは、皆さん
今回の記事ではpythonでの2値化と標準化について紹介したいと思います。
機会学習の世界では、前処理はとても大切なことで、データによって、適切な前処理をしないといけません。
読みたい場所へジャンプ
そもそも、なぜ前処理する必要があるのか
現実世界では、ビッグデータという多くの情報が複雑に絡み合っています。その中には、エラーのデータや、欠陥したデータ、ノイズの入ったデータがあり、その様なデータを含んだものを機械学習に入れてしまうと精度の悪いモデルができてしまうのです。そのため、前処理することで適切なデータを抽出し、質の良い機械学習モデルができるのです。
前処理とは
データを機械学習にかける前に、機械学習が学習しやすいデータに変形すること。
ソースコード
import pandas, scipy, numpy
df=pandas.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv')
array=df.values
x=array[:,0:8]
①標準ライブラリーであるpansad,scipy,numpyをインポートします。
②pandaでcsvファイルを読み込み変数dfに代入。この中にデータがあります。
(ワインを評価しているデータ)
③データはディクショナリ型なので、その中のkeyだけを取り出し変数arrayへ代入。
④2次元配列であるデータの全ての行において、0から7行目までを抽出
つまり、要素数を減らしている。
出力結果
array([[7.400e+00 7.000e-01 0.000e+00 ... 1.100e+01 3.400e+01 9.978e-01]
[7.800e+00 8.800e-01 0.000e+00 ... 2.500e+01 6.700e+01 9.968e-01]
[7.800e+00 7.600e-01 4.000e-02 ... 1.500e+01 5.400e+01 9.970e-01]
...
[6.300e+00 5.100e-01 1.300e-01 ... 2.900e+01 4.000e+01 9.957e-01]
[6.000e+00 3.100e-01 4.700e-01 ... 1.800e+01 4.200e+01 9.955e-01]])
・・・は、たくさんデータがあるという事です。
では、このデータを前処理していきます。
標準化
標準化とは、「平均を0に、標準偏差を1にするスケーリング」といういことです。
つまり、平均を0にして、そこからの、ばらつきを1の範囲に変換するということです。
ソースコード
from sklearn.preprocessing import StandardScaler
scaler=StandardScaler().fit(x)
rescaledX=scaler.transform(x)
rescaledX[0:5,:]
①データの標準化機能を持つStandardScalerをインポート
②配列Xの平均と分散の値を記憶させ記憶させたデータをscalerに代入(数値は変わらない)
③平均と分散の値に変更
④0から4行までにおいて、全ての列を抽出する。
出力結果
array([[-0.528, 0.962, -1.391, -0.453, -0.244, -0.466, -0.379, 0.558, 1.289, -0.579, -0.96 , -0.788],
[-0.299, 1.967, -1.391, 0.043, 0.224, 0.873, 0.624, 0.028, -0.72 , 0.129, -0.585, -0.788],
[-0.299, 1.297, -1.186, -0.169, 0.096, -0.084, 0.229, 0.134, -0.331, -0.048, -0.585, -0.788],
[ 1.655, -1.384, 1.484, -0.453, -0.265, 0.108, 0.412, 0.664, -0.979, -0.461, -0.585, 0.451],
[-0.528, 0.962, -1.391, -0.453, -0.244, -0.466, -0.379, 0.558, 1.289, -0.579, -0.96 , -0.788]])
元のデータに対して、平均0と、ばらつき1のデータに変換できている。
二値化
二値化とは、「値を0と1に分ける」といういことです。
設定した値に対して大きいか小さいかで分けます。
ソースコード
from sklearn.preprocessing import Binarizer
binarizer=Binarizer(threshold=0.0).fit(x)
binaryX=binarizer.transform(x)
binaryX[0:5,:]
①データの二値化機能を持つBinarizerをインポート
②0.0以上の値を1、それより小さい値を0と記憶させ記憶させたデータをscalerに代入(数値は変わらない)
③0.0以上の値を1、それより小さい値を0にする
④0から4行までにおいて、全ての列を抽出する。
出力結果
array([[1., 1., 0., 1., 1., 1., 1., 1.],
[1., 1., 0., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 0., 1., 1., 1., 1., 1.]])
元のデータに対して0と1で二値化できています。