【原】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
したがって、処理するデータセットに欠落値が含まれている場合は、一般的に次の手順に従います.
1、データセットの欠落した値の代わりに文字列'nan'を使用する.
2.このデータセットを浮動小数点型に変換することでnpを含むものを得ることができる.nanのデータセット;
3、sklearnを使う.preprocessing.Imputerクラスで処理するnpを用いる.nan欠落値を符号化したデータセット.
コードは次のとおりです.
1
2
3
4
5
6
7
8
9
10
上記コードは、配列Xを用いて1つのインプラントクラスを「訓練」し、そのクラスのオブジェクトを用いて配列Y中の欠落値を処理し、欠落値の処理は、Y中の欠落値の代わりにX中の平均値(axis=0は列で行う)を用いる.
もちろんimpオブジェクトを用いてX配列自体を処理することも可能である.
通常、私たちのデータはファイルに保存されていますが、必ずしもNumpy配列で生成されているわけではありません.そのため、欠落値はnanで符号化されているとは限らない可能性があります.この場合、以下のコードを参照してください.
1
2
3
4
5
6
7
8
9
10
11
12
上記コードラインは、ファイルから読み出した1行のデータをシミュレートし、nanを使用して元のデータの欠落値符号化の代わりに浮動小数点型に変換し、Xの平均値を使用してZの欠落値を埋める.
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の欠落値を埋める.