何时在为机器学习算法准备特征时去除异常值

数据挖掘 数据清理 离群值
2021-10-14 14:52:46

我有一个数字变量(价格),它在训练和测试数据集中都有长尾。我发现,如果你在训练和测试数据集中为这个变量删除最高 1% 的值,那么在训练和测试数据集中这个变量的直方图看起来几乎一样。见下图。 在此处输入图像描述

我的问题是:我仍然需要使用训练数据(具有特征和标签)对测试数据(仅具有特征)进行预测。在这种情况下,我应该如何处理这个特征变量?我正在考虑删除训练和测试数据集中前 1% 的数据,但由于我仍然需要对这 1% 的测试数据进行预测,所以我猜这不是一个好主意。在这个例子中,由于这个变量在训练和测试数据集中的经验分布在去除“异常值”之前和之后看起来是一样的,我们应该让这个变量保持不变吗?另外,一般来说,在将特征放入机器学习算法之前,我们应该如何处理异常值?

2个回答

处理异常值需要了解异常值、数据集以及可能的领域知识。鉴于此,处理异常值有很多选择。

在不查看您的具体数据的情况下,这个异常值可能代表一个总数?也许您已包含总计的数据源,应将其删除。

通常,弄清楚如何处理异常值需要调查异常值。

如果异常值是数据处理或输入错误,通常可以将其删除或替换为平均值(没有异常值)。

如果已排除错误,请考虑异常值是否可能是合法值?没有正确或错误的答案。

相反,记录您的决定非常重要。我建议使用异常值运行您的模型,而不是比较结果并记录删除或转换异常值的任何决定。

根据您的目的,是否应该删除异常值应该变得相对清楚,例如,如果您正在可视化数据,删除异常值可能比保留它具有更有意义的影响。

看到后会remove回答op吗(请在您这样做后发表评论)

散点图

plt.figure(figsize=(8,6))
plt.scatter(range(df.shape[0]), np.sort(df.loan_amount.values))
plt.xlabel('index', fontsize=12)
plt.ylabel('loan_amount', fontsize=12)
plt.title("Loan Amount Distribution")
plt.show()

尝试箱形图也..

It does really help to correctly predict the outlier ones. We remove them for aesthetic visualisation of the data. However We can choose to (not) include them in our modeling activity because this is what we want to correct or improve on...