【原】Sklearnによるデータプリプロセッシング——欠落値(Missing Value)処理について

4070 ワード

欠落値(missing value)の処理について
sklearnのpreprocessingパッケージには、データセットの欠落値の処理が含まれており、主にImputerクラスを適用して処理される.
まず、numpyの配列にはnpを用いることができる.nan/np.欠落値の代わりにNaN(NotA Number)を用いる、配列中にnanが存在するか否かについてnpを用いることができる.isnan()で判定します.
type(np.nan)またはtype(np.NaN)を使用すると、変更値はfloatタイプに属し、コードは以下の通りです.
1
2
3
4
5
6
7
8 >>> type (np.NaN) < type 'float' > >>> type (np.nan) < type 'float' > >>> np.NaN nan >>> np.nan nan
したがって、処理するデータセットに欠落値が含まれている場合は、一般的に次の手順に従います.
1、データセットの欠落した値の代わりに文字列'nan'を使用する.
2.このデータセットを浮動小数点型に変換することでnpを含むものを得ることができる.nanのデータセット;
3、sklearnを使う.preprocessing.Imputerクラスで処理するnpを用いる.nan欠落値を符号化したデータセット.
コードは次のとおりです.
1
2
3
4
5
6
7
8
9
10 >>> from sklearn.preprocessing import Imputer >>> imp = Imputer(missing_values = 'NaN' , strategy = 'mean' , axis = 0 ) >>> X = np.array([[ 1 , 2 ], [np.nan, 3 ], [ 7 , 6 ]]) >>> Y = [[np.nan, 2 ], [ 6 , np.nan], [ 7 , 6 ]] >>> imp.fit(X) Imputer(axis = 0 , copy = True , missing_values = 'NaN' , strategy = 'mean' , verbose = 0 ) >>> imp.transform(Y) array([[ 4.         2.         ],         [ 6.         3.66666667 ],         [ 7.         6.         ]])
上記コードは、配列Xを用いて1つのインプラントクラスを「訓練」し、そのクラスのオブジェクトを用いて配列Y中の欠落値を処理し、欠落値の処理は、Y中の欠落値の代わりにX中の平均値(axis=0は列で行う)を用いる.
もちろんimpオブジェクトを用いてX配列自体を処理することも可能である.
通常、私たちのデータはファイルに保存されていますが、必ずしもNumpy配列で生成されているわけではありません.そのため、欠落値はnanで符号化されているとは限らない可能性があります.この場合、以下のコードを参照してください.
1
2
3
4
5
6
7
8
9
10
11
12 >>> line = '1,?' >>> line = line.replace( ',?' , ',nan' ) >>> line '1,nan' >>> Z = line.split( ',' ) >>> Z [ '1' , 'nan' ] >>> Z = np.array(Z,dtype = float ) >>> Z array([  1. ,  nan]) >>> imp.transform(Z) array([[ 1.         3.66666667 ]])
上記コードラインは、ファイルから読み出した1行のデータをシミュレートし、nanを使用して元のデータの欠落値符号化の代わりに浮動小数点型に変換し、Xの平均値を使用してZの欠落値を埋める.