机器学习中面对缺失率过高的特征如何处理?

在机器学习中,面对高达70%以上缺失率的特征,文章探讨了缺失值的不同种类,如完全随机缺失、随机缺失和完全非随机缺失。针对这些情况,提出了删除、填充和不处理等处理方案,强调没有最佳方法,需根据具体情境选择。并推荐了相关参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

机器学习的本质是利用数据得到我们想要的函数关系,从而给出相关的预测。但是在实际生产过程中,由于各种原因很多样本采集的特征变量并不能做到完全覆盖所有样本,不同变量的缺失率可能达到70%以上。实际工作中对于这些变量的处理,我们可能并不是急于删除,而是首先从业务角度分析导致变量缺失率过高的原因,如果无法定位问题,接下来才是着手对缺失率过高的变量进行处理。

缺失的种类

  • 完全随机缺失:没有规律,原因不详的缺失
  • 随机缺失:该变量的缺失与其他其他变量有关。比如,变量A记录了某用户的用电量,变量B记录了记录用电的时间,如果变量A因为一些原因只在某个特定的时间内缺失时,那A的缺失类型就是随机缺失。
  • 完全非随机缺失:缺失只与变量自身有关。比如记录中有些用户不愿透露个人信息导致的变量缺失。

说明:前两种缺失在变量充足的情况下可以直接删除,最后一种情况删除变量可能会导致样本出现偏差,从而导致模型偏差,所以处理第三类缺失时需要谨慎一些。

缺失值的统计方法

def get_missing_rate(df):
    """
    获取dataframe变量缺失率
    Args:
        df: dataframe 需要统计缺失的dataframe

    Returns:
        mr_df: 统计好的缺失率dataframe
    """
    import numpy as np
    mr_df = df.count(0).to_frame('total')
    mr_df['total'] = len(df)
    mr_df.loc[:, 'nan_cnt'] = (df.isnull()).sum()
    mr_df.loc[:, 'nan_pct'] = np.round((df.isnull()).sum() * 1.0 / mr_df.total, 3)
    return mr_d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值