机器学习中样本缺失值的处理方法

删除

  • 忽略有缺失值的样本

dropna()

填充

  • 使用可用特征或相似样本的均值来填充缺失值

scikit-learn的Imputer类提供了估算缺失值的基本策略,可以使用缺失值所在的行或列的均值,中位数或最频繁值。这个类还允许不同的缺失值编码。

>>> import numpy as np
>>> from sklearn.preprocessing import Imputer
>>> imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
>>> imp.fit([[1, 2], [np.nan, 3], [7, 6]])
Imputer(axis=0, copy=True, missing_values='NaN', strategy='mean', verbose=0)
>>> X = [[np.nan, 2], [6, np.nan], [7, 6]]
>>> print(imp.transform(X))                           
[[ 4.          2.        ]
 [ 6.          3.666...]
 [ 7.          6.        ]]
  • 使用特殊值来填补缺失值,如-1

fillna()

  • 使用机器学习算法预测缺失值
lb = 'Education'
idx = 0
tr = np.where(df_all[lb] != -1)[0]
va = np.where(df_all[lb] == -1)[0]
df_all.iloc[va, idx] = LogisticRegression(C=1).fit(X_all[tr],
                                                   df_all.iloc[tr, idx]).predict(X_all[va])

lb = 'age'
idx = 2
tr = np.where(df_all[lb] != -1)[0]
va = np.where(df_all[lb] == -1)[0]
df_all.iloc[va, idx] = LogisticRegression(C=2).fit(X_all[tr],
                                                   df_all.iloc[tr, idx]).predict(X_all[va])

lb = 'gender'
idx = 3
tr = np.where(df_all[lb] != -1)[0]
va = np.where(df_all[lb] == -1)[0]
df_all.iloc[va, idx] = LogisticRegression(C=2).fit(X_all[tr],
                                                   df_all.iloc[tr, idx]).predict(X_all[va])

df_all = pd.concat([df_all, df_te]).fillna(0)
df_all.to_csv(cfg.data_path + 'all_v2.csv', index=None
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值