Sklearn缺失值插值估算

在建立估算器之前估算缺失值
代碼鏈接https://gitee.com/youryouth/mc/tree/9ccdba810aa2cd6b4c90b60c644325941b616b11/sklearn/missing_data_imputer
可以使用基本sklearn.impute.SimpleImputer將缺失值替換為平均值,中位數(shù)或最頻繁的值(眾數(shù))。
在此示例中,我們將研究不同的插補(bǔ)技術(shù):
填充常數(shù)0
每個(gè)特征的平均值進(jìn)行歸因,并結(jié)合缺失指標(biāo)輔助變量
k最近鄰歸因
迭代插補(bǔ)
我們將使用兩個(gè)數(shù)據(jù)集:糖尿病數(shù)據(jù)集,其中包括10個(gè)從糖尿病患者那里收集的,旨在預(yù)測(cè)疾病進(jìn)展的特征變量;以及加利福尼亞住房數(shù)據(jù)集,其目標(biāo)是加利福尼亞地區(qū)的平均房價(jià)。
由于這些數(shù)據(jù)集都沒有缺失值,因此我們將刪除一些值以使用人為缺失的數(shù)據(jù)創(chuàng)建新版本。 然后將RandomForestRegressor在完整原始數(shù)據(jù)集上的性能與使用不同技術(shù)估算的人工缺失值與變更后的數(shù)據(jù)集的性能進(jìn)行比較。

下載數(shù)據(jù)并設(shè)置缺失值集
首先,我們下載兩個(gè)數(shù)據(jù)集。 scikit-learn附帶了糖尿病數(shù)據(jù)集。 它具有442個(gè)條目,每個(gè)條目具有10個(gè)特征。 加州住房數(shù)據(jù)集更大,有20640個(gè)條目和8個(gè)特征,需要下載。 為了加快計(jì)算速度,我們將僅使用前400個(gè)條目,但可以隨意使用整個(gè)數(shù)據(jù)集。
X_california shape (400, 8), y_california (400,)?
X_miss_california shape (400, 8), y_miss_california (400,)?
?X_diabetes shape (442, 10), y_diabetes (442,)?
X_miss_diabetes shape (442, 10), y_miss_diabetes (442,)

插補(bǔ)缺失值并打分
現(xiàn)在,我們將編寫一個(gè)函數(shù),該函數(shù)將對(duì)不同插補(bǔ)數(shù)據(jù)的結(jié)果進(jìn)行評(píng)分。 讓我們分別看一下每個(gè)不良因素:
除了估算缺失值外,注入器還具有一個(gè)add_indicator參數(shù),該參數(shù)標(biāo)記缺失的值,其中可能包含一些信息。

使用0替換缺失值
現(xiàn)在,我們將在缺失值被0代替的數(shù)據(jù)上估算分?jǐn)?shù):

缺失值的kNN填補(bǔ)
sklearn.impute.KNNImputer使用所需的最近鄰居數(shù)的加權(quán)或未加權(quán)平均值來估算缺失值。

均值填補(bǔ)缺失值

缺失值的迭代估算
另一個(gè)選項(xiàng)是sklearn.impute.IterativeImputer。 這使用循環(huán)線性回歸,依次將缺少值的每個(gè)特征建模為其他特征的函數(shù)。 所實(shí)現(xiàn)的版本假定為高斯(輸出)變量。 如果您的功能顯然不正常,請(qǐng)考慮將其轉(zhuǎn)換為看起來更正常,以潛在地提高性能。

繪制結(jié)果
最后,我們將可視化分?jǐn)?shù)計(jì)算并輸出:

如圖,可以看出,插值填補(bǔ)后,經(jīng)過分類器得到的MSE均大于原始數(shù)據(jù)集的MSE,尤其在Diabetes Data數(shù)據(jù)集上比較明顯。

代碼鏈接
https://gitee.com/youryouth/mc/tree/9ccdba810aa2cd6b4c90b60c644325941b616b11/sklearn/missing_data_imputer
參考原文:https://scikit-learn.org.cn/view/281.html?