機器學(xué)習(xí):處理缺失值方法總結(jié)
你好,我是你們的老朋友,zhenguo!
處理缺失值是在進(jìn)行機器學(xué)習(xí)時非常重要的一個步驟。
缺失值會影響機器學(xué)習(xí)模型的準(zhǔn)確度,因此在訓(xùn)練模型之前,通常需要先處理掉缺失值。
這篇文章,總結(jié)一些常見的缺失值處理方法。
常見處理方法
機器學(xué)習(xí)常見處理方法包括:
-
刪除帶有缺失值的行:這種方法適用于數(shù)據(jù)集中缺失值較少的情況。但是,如果刪除的行數(shù)過多,會導(dǎo)致數(shù)據(jù)集的樣本量過少,不利于模型的訓(xùn)練。
-
用平均值、中位數(shù)或眾數(shù)來填補缺失值:這種方法適用于
數(shù)值型的特征。例如,對于一個有缺失值的數(shù)值型特征,可以用這個特征的平均值來填補缺失值。 -
使用模型預(yù)測缺失值:對于缺失值較多的數(shù)據(jù)集,可以考慮先訓(xùn)練一個機器學(xué)習(xí)模型,然后用這個模型來預(yù)測缺失值。
-
使用熱門值來填補缺失值:如果缺失值的特征有很多類別,可以考慮使用這個特征的熱門值來填補缺失值。
-
使用近似值來填補缺失值:對于連續(xù)型的特征,可以使用與該特征最相似的其他特征的值來填補缺失值。
缺失值處理實戰(zhàn):處理方法1和2
下面是使用 Python 中的 Pandas 庫來處理缺失值的代碼示例。
首先,我們導(dǎo)入所需的庫:
import?pandas?as?pd
然后,我們創(chuàng)建一個簡單的數(shù)據(jù)集,其中包含一些缺失值:
data?=?{'A':?[1,?2,?3,?4,?5],
????????'B':?[6,?7,?8,?None,?10],
????????'C':?[11,?12,?13,?14,?15],
????????'D':?[16,?17,?None,?19,?20]}
df?=?pd.DataFrame(data)
print(df)
輸出的數(shù)據(jù)集如下:
???A?????B???C?????D
0??1???6.0??11??16.0
1??2???7.0??12??17.0
2??3???8.0??13???NaN
3??4???NaN??14??19.0
4??5??10.0??15??20.0
接下來,我們可以使用 Pandas 庫中的 dropna() 函數(shù)來刪除帶有缺失值的行:
df_without_missing_values?=?df.dropna()
print(df_without_missing_values)
輸出的結(jié)果如下:
???A?????B???C?????D
0??1???6.0??11??16.0
1??2???7.0??12??17.0
4??5??10.0??15??20.0
然后,我們可以使用 Pandas 庫中的 fillna() 函數(shù)來用平均值填補缺失值:
mean_value?=?df['B'].mean()
df['B']?=?df['B'].fillna(mean_value)
mean_value?=?df['D'].mean()
df['D']?=?df['D'].fillna(mean_value)
print(df)
輸出的數(shù)據(jù)集如下:
???A??????B???C?????D
0??1???6.00??11??16.0
1??2???7.00??12??17.0
2??3???8.00??13??18.0
3??4???7.75??14??19.0
4??5??10.00??15??20.0
另外,我們還可以使用 Pandas 庫中的 interpolate() 函數(shù)來用插值法填補缺失值:
df_interpolated?=?df.interpolate()
print(df_interpolated)
缺失值處理實戰(zhàn):處理方法3(使用模型預(yù)測缺失值)
我們還可以使用機器學(xué)習(xí)算法來預(yù)測缺失值。下面是使用 Scikit-learn 庫中的線性回歸模型來預(yù)測缺失值的代碼示例:
from?sklearn.linear_model?import?LinearRegression
#?選擇用來預(yù)測的特征
X?=?df[['A',?'C']]
#?選擇要預(yù)測的目標(biāo)特征
y?=?df['B']
#?將缺失值用平均值填補
mean_value?=?y.mean()
y?=?y.fillna(mean_value)
#?創(chuàng)建線性回歸模型
reg?=?LinearRegression().fit(X,?y)
#?預(yù)測缺失值
predictions?=?reg.predict(X)
#?將預(yù)測結(jié)果填入數(shù)據(jù)集
df['B']?=?predictions
print(df)
B列填充后,輸出的結(jié)果如下:
???A??????????B???C?????D
0??1???6.666667??11??16.0
1??2???7.333333??12??17.0
2??3???8.000000??13???NaN
3??4???8.666667??14??19.0
4??5??10.000000??15??20.0
還可以使用分類和回歸樹 (CART) 算法來預(yù)測缺失值。下面是使用 Scikit-learn 庫中的決策樹模型來預(yù)測缺失值的代碼示例:
from?sklearn.tree?import?DecisionTreeRegressor
#?創(chuàng)建決策樹模型
reg?=?DecisionTreeRegressor().fit(X,?y)
#?預(yù)測缺失值
predictions?=?reg.predict(X)
#?將預(yù)測結(jié)果填入數(shù)據(jù)集
df['B']?=?predictions
print(df)
最后,缺失值填充要根據(jù)數(shù)據(jù)集的特點和需求,選擇合適的方法來處理缺失值。
大家一起加油????!
