2018年2月27日 星期二

Python 機器學習_ML_Imputer

機器學習_ML_Imputer 資料插補

說明

在現實的資料處理中,我們常會遇到資料有缺的狀況,這邊一個,那邊缺一個,這時候我們有兩個選擇,一是放棄它,直接刪除,二是插補。
在sklearn中就有方便的lib可以協助我們直接處理這個問題!

IMPORT

from sklearn.preprocessing import Imputer

CLASS

class sklearn.preprocessing.Imputer(missing_values=’NaN’,
                                    strategy=’mean’, 
                                    axis=0, 
                                    verbose=0, 
                                    copy=True)

參數說明

missing_values

integer or ‘NaN’, optional (default=‘NaN’)
對於numpy的缺值部份,都是以NaN來表示,這部份在pandas亦然。

strategy

string, optional (default=‘mean’)
  • mean:以均值補
  • median:以中位數補
  • most_frequent:最常出現的來補

axis

integer, optional (default=0)
  • 0:column
  • 1:row
以column與row來表示,似乎比較好理解

verbose

default 0
過程是否輸出
0不輸出
1偶爾輸出
1就一定輸出

copy

boolean, optional (default=True)

範例

資料集如下:
類別 身高 體重 性別 年紀
175 70 35
160 50 31
175 27
180 80
180 100 18
#  載入需求lib
import numpy as np
import pandas as pd
#  插補套件
from sklearn.preprocessing import Imputer

#  手動寫入資料集
ds = [
    ('胖',175,70,'男',35),
    ('瘦',160,50,'女',31),
    ('瘦',175,None,'男',27),
    ('胖',180,80,'女',None),
    ('胖',180,100,'男',18)]

columns = ['label','high','weight','sex','years']

#  假裝一下資料載入pandas,比較有fu
df = pd.DataFrame.from_records(ds,columns=columns)

#  確認資料是否載入pandas
df

#  資料拆分
X = df.iloc[:,1:].values
y = df.iloc[:,0].values

#  檢查X的資料,可以發現NULL的部份是NaN
X

#  做資料插補
imputer = Imputer(missing_values='NaN', axis=0, strategy='mean')
imputer.fit_transform(X[:,[1,3]])

#  驗證
print((70+50+80+100)/4)
# 75
print((35+31+27+18)/4)
# 27.75

沒有留言:

張貼留言