【问题标题】:How to handle missing features in a sample while doing predictions?在进行预测时如何处理样本中缺失的特征?
【发布时间】:2022-01-17 19:42:21
【问题描述】:

我有兴趣在缺少一些特征的推理阶段(而不是训练期间)生成预测。

问题陈述和我的实现是:

  • 我有一个包含 26k 样本的表格数据集,其中包含 17 个特征(一些是分类的,一些是连续的)。
  • 很多样本(大约 3k)缺少多个特征值。
  • 我使用了多种方法进行插补。例如,按目标变量分组,然后根据变量的类别将 NaN 替换为组均值/众数。
df["danceability"] = df.groupby("music_genre")["danceability"].transform(lambda x: x.fillna(x.mean()))
  • 这里,music_genre 是目标,danceability 有浮点值,其中一些缺失。

  • 这样,所有缺失的值都被删除了。

  • 之后,我用网格搜索训练了一个 XGBoost 分类器。

  • 但是,现在我将这个模型作为一个烧瓶应用程序提供服务,我需要用 预测 来响应所有请求。请求可以是批次(一组样本)或单个样本

  • 问题是请求中的样本有一些缺少的特征,但我仍然必须生成预测,因为我应该这样做。

我应该怎么做?

【问题讨论】:

  • 您也许可以使用其余的功能来预测缺失值??
  • 实际上,在推理过程中,可能会丢失多个特征!那么,我是否应该首先训练多个模型,让它们在给定其他模型的情况下生成任何特征...
  • 是的,但这听起来需要做很多工作 xD
  • 我认为这在 ML 社区中将是一项微不足道的任务。但是,当我开始探索时,我发现了 2-3 个资源,人们和我一样感到困惑。我想即使在训练时我也需要改变方法!最后的手段是通过全局统计措施来填补缺失的数据!

标签: pandas machine-learning scikit-learn prediction feature-engineering


【解决方案1】:

我能想到的一件事是,在训练时,您可以从某些特征中随机删除值,然后将其替换为您自己的一些自定义值(您可以在推理过程中使用此值来填充缺失的特征值)。

因此,假设您的训练行之一是:x1, x2, x3, x4, y 其中 y 是您的目标变量,现在您可以随机替换其中一个特征值,并在此过程中再生成一个训练行。假设我们用新值 X3 替换 x3。所以新的训练行将是x1, x2, X3, x4, y。在推理过程中,如果 x3 的值不存在,我将简单地用 X3 的值填充它。希望这是有道理的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2017-02-21
    • 1970-01-01
    • 2017-10-18
    • 2018-09-13
    相关资源
    最近更新 更多