在sklearn的preprocessing包中包含了對資料集中缺失值的處理,主要是應用imputer類進行處理。
首先需要說明的是,numpy的陣列中可以使用np.nan/np.nan(not a 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去「訓練」乙個imputer類,然後用該類的物件去處理陣列y中的缺失值,缺失值的處理方式是使用x中的均值(axis=0表示按列進行)代替y中的缺失值。
當然也可以使用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
]])
上述**line模擬從檔案中讀取出來的一行資料,使用nan來代替原始資料中的缺失值編碼,將其轉換為浮點型,然後使用x中的均值填補z中的缺失值。
sklearn處理缺失值
匯入包 from sklearn.impute import sampleimpute先將一列資料初始化為乙個二維的 data age data.loc age values.reshape 1 1 開始填補缺失值 imp mean impute 預設用0填補 imp median impute s...
sklearn 缺失值處理器 Imputer
class sklearn.preprocessing.imputer missing values nan strategy mean axis 0,verbose 0,copy true 引數 axis 預設為 axis 0 說實話,我還是沒太弄明白aixs的具體含義,總感覺在不同的函式中有不同...
sklearn 資料填補缺失值
機器學習和資料探勘中所使用的資料,永遠不可能是完美的。很多特徵,對於分析和建模來說意義非凡,但對於實 際收集資料的人卻不是如此,因此資料探勘之中,常常會有重要的字段缺失值很多,但又不能捨棄欄位的情況。因 此,資料預處理中非常重要的一項就是處理缺失值。從kaggle中簡單的獲取的鐵達尼號的遇難者生存資...