slearn缺失值處理器之Imputer詳析
class sklearn.preprocessing.Imputer(missing_values=’NaN’, strategy=’mean’, axis=0, verbose=0, copy=True)
參數:
- missing_values: integer or “NaN”, optional (default=”NaN”)
- strategy : string, optional (default=”mean”)
- The imputation strategy.
- If “mean”, then replace missing values using the mean along the axis. 使用平均值代替
- If “median”, then replace missing values using the median along the axis.使用中值代替
- If “most_frequent”, then replace missing using the most frequent value along the axis.使用眾數代替,也就是出現次數最多的數
- The imputation strategy.
- axis: 默認為 axis=0
- axis = 0, 按列處理
- aixs =1 , 按行處理
說實話,我還是沒太弄明白aixs的具體含義,總感覺在不同的函數中有不同的含義。。還是使用前查找一下官方文檔吧,畢竟大多數時候處理的都是2維數組,文檔中的參數很容易理解。
註意:
- Imputer 隻接受DataFrame類型
- Dataframe 中必須全部為數值屬性
所以在處理的時候註意,要進行適當處理
數值屬性的列較少,可以將數值屬性的列取出來 單獨取出來
import pandas as pd import numpy as np df=pd.DataFrame([["XXL", 8, "black", "class 1", 22], ["L", np.nan, "gray", "class 2", 20], ["XL", 10, "blue", "class 2", 19], ["M", np.nan, "orange", "class 1", 17], ["M", 11, "green", "class 3", np.nan], ["M", 7, "red", "class 1", 22]]) df.columns=["size", "price", "color", "class", "boh"] print(df) # out: ''' size price color class boh 0 XXL 8.0 black class 1 22.0 1 L NaN gray class 2 20.0 2 XL 10.0 blue class 2 19.0 3 M NaN orange class 1 17.0 4 M 11.0 green class 3 NaN 5 M 7.0 red class 1 22.0 ''' from sklearn.preprocessing import Imputer # 1. 創建Imputer器 imp =Imputer(missing_values="NaN", strategy="mean",axis=0 ) # 先隻將處理price列的數據, 註意使用的是 df[['price']] 這樣返回的是一個DataFrame類型的數據!!!! # 2. 使用fit_transform()函數即可完成缺失值填充瞭 df["price"]=imp.fit_transform(df[["price"]]) df # out: ''' size price color class boh 0 XXL 8.0 black class 1 22.0 1 L 9.0 gray class 2 20.0 2 XL 10.0 blue class 2 19.0 3 M 9.0 orange class 1 17.0 4 M 11.0 green class 3 NaN 5 M 7.0 red class 1 22.0 ''' # 直接處理price和boh兩列 df[['price', 'boh']] = imp.fit_transform(df[['price', 'boh']]) df # out: ''' size price color class boh 0 XXL 8.0 black class 1 22.0 1 L 9.0 gray class 2 20.0 2 XL 10.0 blue class 2 19.0 3 M 9.0 orange class 1 17.0 4 M 11.0 green class 3 20.0 5 M 7.0 red class 1 22.0 '''
數值屬性的列較多,相反文本或分類屬性(text and category attribute)較少,可以先刪除文本屬性,處理完以後再合並
from sklearn.preprocessing import Imputer # 1.創建Iimputer imputer = Imputer(strategy="median") # 隻有一個文本屬性,故先去掉 housing_num = housing.drop("ocean_proximity", axis=1) # 2. 使用fit_transform函數 X = imputer.fit_transform(housing_num) # 返回的是一個numpyarray,要轉化為DataFrame housing_tr = pd.DataFrame(X, columns=housing_num.columns) # 將文本屬性值添加 housing_tr['ocean_proximity'] = housing["ocean_proximity"] housing_tr[:2] # out: ''' longitude latitude housing_median_age total_rooms total_bedrooms population households median_income 0 -121.89 37.29 38.0 1568.0 351.0 710.0 339.0 2.7042 1 -121.93 37.05 14.0 679.0 108.0 306.0 113.0 6.4214 '''
補充:sklearn中的Imputer模塊改動
在sklearn的0.22以上版本的sklearn去除瞭Imputer類,我們可以使用SimpleImputer類代替。或者降級回版本sklearn 0.19
from sklearn.impute import SimpleImputer #有如下的一些參數 sklearn.impute.SimpleImputer( missing_values=nan, strategy='mean', fill_value=None, verbose=0, copy=True, add_indicator=False )[source]
imputer = SimpleImputer(missing_values=NA, strategy = "mean")
用上面那個代碼就可以實現imputer的功能。其他的參數詳解如下,具體的話大傢去查閱sklearn庫的說明。
- misssing_values: number,string,np.nan(default) or None
缺失值的占位符,所有出現的占位符都將被計算 - strategy: string,default=‘mean’ 計算並替換的策略:
"mean,使用該列的平均值替換缺失值。僅用於數值數據; “median”,使用該列的中位數替換缺失值。僅用於數值數據;
“most_frequent”,使用每個列中最常見的值替換缺失值。可用於非數值數據;
“constant”,用fill_value替換缺失值。可用於非數值數據。 - fill_value: string or numerical value,default=None
當strategy為"constant",使用fil_value替換missing_values。如果是default,使用0替換數值數據,使用"missing_value"替換字符串或對象數據類型 - verbose: integer,default=0
- copy: boolean,default=True
- True: 將創建X的副本;False: 隻要有可能,就會原地替換。註意,一下情況即使copy=False,也會創建新的副本:
- add_indicator: boolean,default=False
True,則MissingIndicator將疊加到輸入器轉換的輸出上。這樣即使進行瞭imputation歸算,也同樣會讓預測估算器描述缺失值。如果某個特征在fit/train時沒有缺失值,那麼即使在transform/tes時有缺失值,該特征也不會出現在缺失的指示器上。
隨著版本的更新,Imputer的輸入方式也發生瞭變化,一開始的輸入方式為
from sklearn.preprocessing import Imputer imputer = Imputer(strategy='median')
現在需要對上面輸入進行更新,輸入變為
from sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy="median")
簡單使用:
from sklearn.impute import SimpleImputer import numpy as np def im(): """ 缺失值處理 :return: None """ im1 = SimpleImputer(missing_values=np.nan, strategy='mean') data = im1.fit_transform([[1, 2], [np.nan, 3], [7, 6]]) print(data) return None if __name__ == "__main__": im()
總結
到此這篇關於slearn缺失值處理器之Imputer的文章就介紹到這瞭,更多相關slearn缺失值處理器Imputer內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python sklearn與pandas實現缺失值數據預處理流程詳解
- Python pandas處理缺失值方法詳解(dropna、drop、fillna)
- python 如何通過KNN來填充缺失值
- 19個Python Sklearn中超實用的隱藏功能分享
- python機器學習基礎特征工程算法詳解