处理分类缺失值 ML

数据挖掘 机器学习 Python 分类 缺失数据 数据插补
2022-02-24 15:11:21

关于处理分类数据中的缺失值,我已经完成了这个。

数据集大约6 categorical columnsmissing values. 这将是一个二元分类问题

我看到了不同的方法,一种是使用just leave the missing values in category column as such,另一种是使用from sklearn.preprocessing import Imputer,但不确定哪个是更好的选择。

如果imputing是更好的选择,我可以在应用模型之前使用哪些库,例如LR,Decision Tree, RandomForest.

谢谢!

4个回答

首先,我会查看列中有多少缺失值。如果有太多(~20%,通常很难说有多少是太多),我会删除该列,因为输入 20% 的数据(没有事先的专业知识)甚至更可能不会给你有意义的信息了。

其次,我会研究缺失值与其他特征之间的相关性。也许您很幸运,并且 x 列中的缺失值与 y 列中的分类值之间存在一些相关性。简单地看一下条件分布。

如果您选择插补,请检查分类值的分布以查找非缺失条目。如果分布严重偏斜,比如有 95% 的值为 0,只有 5% 的值为 1,则可以使用中位数进行估算。同样,问题是这到底有多少信息。否则,创建一个仅表示缺失值的附加分类值。

我们必须问的第一个问题是“为什么缺少这些值?”

  1. 如果大于 25%,则跳过该功能

  2. 尝试从数据源/提供者那里了解原因。他们可能会提供线索,您可以使用该线索,例如,一个城市在数据收集期间出现电源故障。

  3. 只需为缺失创建一个新类别并检查结果。这只有在有潜在的失踪原因时才有效

  4. 尝试计算/猜测领域知识与其他特征的相关性,然后填写相应的值。我提出这一点是为了避免整列的平均值/中值,例如在下面的数据中,整列的平均值 ~750 但我们应该填充 ~100

                                            在此处输入图像描述

  1. K 最近邻- 这可以一次性完成 #3 的两个步骤。幸运的是,SciKitLearn 有一个 Imputer。例如sklearn.impute.KNNImputer(一次保持一个分类)

  2. 盲法- 简单地替换为平均值/中值。对于分类 - most_frequent(模式) SimpleImputer(strategy="most_frequent")

  3. 尝试一些并监控结果以确定最佳方法

  4. 深思熟虑的读物
    ——Max Kuhn 和 Kjell Johnson

    我想说的一点是将数据视为事件/因果关系,并在直接寻找锤子/枪之前尝试弄清楚事情。如果它是一个真正的项目。如果是学东西就好了。

如何训练 ML 分类模型,其中所有特征都用作输入,标签是您的分类值。这样我们就可以预测缺失值。

我会在其他答案中补充说,如果这些缺失值具有含义,即使它们包含超过一半的缺失值,列也可能很有用例如,在信用风险建模中,可能有一列包含一些财务报表指标,其中缺失值可能意味着该人拒绝提供财务报表,这本身就是一个很大的风险危险信号。因此,无论数据来自何处,澄清这一点总是有帮助的。