【原】關於使用Sklearn進行數據預處理 —— 缺失值(Missing Value)處理

關於缺失值(missing value)的處理

在sklearn的preprocessing包中包含了對數據集中缺失值的處理,主要是應用Imputer類進行處理。python

首先須要說明的是,numpy的數組中可使用np.nan/np.NaN(Not A Number)來代替缺失值,對於數組中是否存在nan可使用np.isnan()來斷定。數組

使用type(np.nan)或者type(np.NaN)能夠發現改值其實屬於float類型,代碼以下:post

1
2
3
4
5
6
7
8
>>> type (np.NaN)
< type 'float' >
>>> type (np.nan)
< type 'float' >
>>> np.NaN
nan
>>> np.nan
nan

所以,若是要進行處理的數據集中包含缺失值通常步驟以下:編碼

一、使用字符串'nan'來代替數據集中的缺失值;spa

二、將該數據集轉換爲浮點型即可以獲得包含np.nan的數據集;code

三、使用sklearn.preprocessing.Imputer類來處理使用np.nan對缺失值進行編碼過的數據集。orm

代碼以下:對象

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中的缺失值。blog

固然也可使用imp對象來對X數組自己進行處理。ci

一般,咱們的數據都保存在文件中,也不必定都是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中的缺失值。

相關文章
相關標籤/搜索