首頁 > 軟體

slearn缺失值處理器之Imputer詳析

2022-08-16 14:02:45

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.使用眾數代替,也就是出現次數最多的數
  • 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內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com