处理机器学习模型中的缺失数据

发布日期:2026-07-20 00:52:03  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-20 00:52:03  
0

介绍

处理不同大小的数据集时,数据丢失是最令人烦恼的问题之一。数据集中数据丢失的原因有很多。一些常见原因如下:

  • 数据来自各种来源:一组数据没有捕捉到某些值,另一组数据没有其他值。因此,数据中会有缺口。
  • 数据随着时间的推移变得更加丰富:按时间顺序首先收集的数据可能不具有稍后收集的数据的属性。
  • 不再收集数据:由于某些原因(道德、政治),可能不会收集某些属性的数据,例如政府可能决定不再收集与宗教、种族和民族有关的数据。
  • 在调查过程中,有些人无法回答所有问题。

用于描述缺失数据的术语

根据缺失数据的来源,使用以下术语来描述它:

  1. 随机缺失 (MAR):此类缺失数据是指由于调查设计方式而无法回答的属性。例如,考虑调查中的以下问题:

a. 您抽烟吗?是,否

b. 如果是,频率是多少?每周一次、每天一次、每天两次、每天两次以上

可以看出,只有当问题 a 的答案为“是”时,才能给出问题 b 的答案。数据集中这种缺失值是由于一个属性对另一个属性的依赖而产生的。

  1. 完全随机缺失 (MCAR):此类缺失数据是真正缺失的数据或由于疏忽或其他原因而未捕获的数据。在调查中,一个人可能会在填写问卷时休息一下,回来后,他可能会从下一页开始,而前一页上的一些问题没有回答。

  2. 非随机缺失 (MNAR):此类缺失数据取决于数据本身的值。例如,一项调查需要人们透露他们的 10 年级化学成绩。分数较低的人可能会选择不透露成绩,因此您只会在数据样本中看到高分。

如何处理缺失数据

我们可以用两种主要方式来处理缺失的数据。

删除数据

在这种处理缺失数据的方法中,用户从数据集中删除缺少数据的记录或列。

让我们考虑以下数据集:

      import pandas as pd 
df = pd.read_csv('household_data_missing.csv')   
print(df)
    

输出:

      Item_Category  Gender  Age   Salary Purchased  satisfaction
0       Fitness    Male   20      NaN       Yes            NaN
1       Fitness  Female   50  70000.0        No            NaN
2          Food    Male   35  50000.0       Yes            NaN
3       Kitchen    Male   22      NaN        No            NaN
4       Kitchen  Female   30  35000.0       Yes            NaN
    

删除所有值为 NA 的列。

      print(df.dropna(axis='columns', how='all'))
    

输出:

      Item_Category  Gender  Age   Salary Purchased
0       Fitness    Male   20      NaN       Yes
1       Fitness  Female   50  70000.0        No
2          Food    Male   35  50000.0       Yes
3       Kitchen    Male   22      NaN        No
4       Kitchen  Female   30  35000.0       Yes
    

保留至少包含五个值的所有行。

      print(df.dropna(axis='rows', thresh=5))
    

输出:

      Item_Category  Gender  Age   Salary Purchased  satisfaction
1       Fitness  Female   50  70000.0        No            NaN
2          Food    Male   35  50000.0       Yes            NaN
4       Kitchen  Female   30  35000.0       Yes            NaN
    

插值

建议尽可能保留数据而不删除它。为此,用户可以利用可用的数据点,通过使用称为插值的技术来估计未知数据的值。pandas 插值函数中提供了多种方法可用于获取数据值。

      print(df.interpolate(method='linear'))
    

输出:

      Item_Category  Gender  Age        Salary Purchased  satisfaction
0       Fitness    Male   20  25000.000000       Yes            NaN
1       Fitness  Female   50  70000.000000        No            NaN
2          Food    Male   35  58333.333333       Yes            NaN
3       Kitchen    Male   22  46666.666667        No            NaN
4       Kitchen  Female   30  35000.000000       Yes            NaN
    
      print(df.interpolate(method='quadratic'))
    

输出:

      Item_Category  Gender  Age        Salary Purchased  satisfaction
0       Fitness    Male   20  25000.000000       Yes            NaN
1       Fitness  Female   50  70000.000000        No            NaN
2          Food    Male   35  86666.666667       Yes            NaN
3       Kitchen    Male   22  75000.000000        No            NaN
4       Kitchen  Female   30  35000.000000       Yes            NaN
    

其他方法

还提供了许多其他方法可用于不同情况:

  1. 样条曲线:如果估计值超出已知的最小值和最大值范围。
  2. 克里金法:该模型使用所有现有数据点的相关性来预测缺失数据的值。
  3. 二次:当数据值以更快的速率变化时。
  4. Akima:如果目的是从一个点到另一个点的平滑移动,那么应该使用 Akima 插值。

结论

用户可以使用多种方法来处理缺失数据,从删除缺失数据的数据点到插值。然而,在选择方法之前,需要了解每种策略涉及的许多因素和风险。如上所述,用户应尽可能利用手头可用的数据,但对稀疏的数据使用插值可能会导致数据过度拟合,从而导致不可预测的结果。

以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据