要为NN删除数据中的异常值,好还是坏主意?

时间:2019-07-30 23:28:19

标签: python neural-network outliers

我有一些离群值的数据。但是,我的数据具有方向性,并且在寻找异常值时需要考虑一些趋势。但是,离群值并不是简单的是或否答案。我唯一能说的是,数据点离趋势越远,可能性就越大,这是我不希望在数据中包含的异常值。

考虑到看台偏差,线性回归以及我正在查看的数据块之类的内容完全取决于上下文,因此我不知道要确定某个异常值与否的静态函数。

我可以使用各种技术选择好的离群值,但是问题是,只要摆脱掉离群值,就使用从中选取离群值的数据的上下文。

我知道,当您为NN准备数据时,必须始终以完全相同的方式准备数据。即,它经历一组静态过程/功能。用于选择离群值的技术需要上下文和上下文更改,因此功能也会更改。我不确定选择异常值的方式是否足以引发模型的完整性。

如果是这样,是否有任何好的静态方法来选择异常值?

1 个答案:

答案 0 :(得分:0)

选择异常值的独立于模型的方式是基于误差的分布。归结为:

  1. 使模型具有所有数据点
  2. 计算每个数据点的残留误差
  3. 根据某个阈值消除异常值
  4. 从零开始重新拟合模型,并移除异常值
  5. (可选地重复直到满足终止条件,例如未移除异常值)

消除的阈值取决于问题和度量。一种消除异常值的方法是在残差上计算z分数(减去均值并除以残差的标准偏差),然后删除绝对值大于定义阈值(等于与均值之间的标准偏差(在这些点处识别为离群值)。

https://en.wikipedia.org/wiki/Standard_score

这是一种通用的,与模型无关的方法,该方法假定残差是正态分布的(或者至少可以基于相对误差合理地识别异常值)。

如果对残差的分布有其他假设,则可以应用其他概率标准(例如,对残差进行分布拟合,然后对每个点应用概率阈值)。但是,这涉及的更多,并且如果您对残差分布的特征没有先验的看法(除了“大的误差可能是离群值”之外),那么z得分是可行的方法。

前面的内容讨论了如何识别异常值,但是没有讨论是否应该。这是一个与应用程序有关的问题。如果离群值不能提供您要建模的行为的信息,则可以将其从训练中删除。但是,如果您希望模型预测包括异常值在内的平均(或其他优化指标)行为,则应保留它们。