我想知道如何大规模处理异常值。根据我的经验,我通常需要首先了解为什么会有异常值。是什么原因造成的,是否有任何模式,或者它只是随机发生的。我知道,从理论上讲,我们通常将异常值定义为 3 个标准差之外的数据点。但是,在数据如此之大以至于您无法逐个处理每个特征,并且由于稀疏性而不知道 3 个标准差规则是否仍然适用的情况下,我们如何最有效地处理异常值。
我对高维数据的直觉是,数据是稀疏的,所以"异常值"的定义更难确定。你们认为我们能够使用对异常值更健壮的 ML 算法(基于树的模型、健壮的 SVM 等)而不是尝试在预处理步骤中处理异常值吗?如果我们真的想治疗它,最好的方法是什么?
我将首先提出一个用于理解数据的框架工作。想象一下,你得到一个数据集,没有解释它是什么。分析实际上可以用来让我们理解。通常,行是关于观察的某种观察值和列参数。你首先要有一个框架来衡量你想要实现的目标。现在事情正在发生,所有的数据中心都围绕着人们的利益......这就是为什么我们决定以某种格式录制它。鉴于此,我们最多对以下方面感兴趣:
1.) 对象 2.) 对象的属性 3.) 对象的行为 4.) 对象的偏好 4.) 对象随时间推移的行为和偏好 5.) 对象与其他对象的关系 6.) 属性、行为、首选项和其他对象对对象的影响
因此,您要识别这些项目。所以你打开一个数据集,也许你会立即识别出一个时间戳。然后,您会看到一些分类变量,并开始对一对一、一对多、多对多进行关系分析。然后确定连续变量。所有这些共同为识别异常值奠定了基础。
如果我们正在评估随时间推移的对象......是罕见的事件,表明很少发生的事情,但我们想知道。森林火灾是异常事件...但它们是令人极为关切的事件。如果我正在分析机器数据并遇到罕见事件,但这些罕见事件与机器故障有关,那么这很重要。基本上。。。。。罕见事件参数是否表明它与您关心的事情相关?
现在,如果你有这么多维度,以至于上述方法对你的判断不可行,那么你正在寻找降维替代方案。我目前正在使用单值分解作为技术。我已经看到我用 25% 的数据完成相同水平的预测能力的情况。这进入了我最后的想法;找到一个标记来决定异常值是否重要。
首先保留它们,然后开始分析,并在删除它们的情况下再次运行工作。有什么影响。我相信,当你有疑问时,只需两者兼而有之,看看结果有多大不同。如果没有什么区别,也许你很好去。如果关注点存在显著差异,则您希望对发生的异常值采取基于证据的方法。仅仅因为它在您的数据中很少见并不意味着它是罕见的。想想某些被低估的犯罪类型(通过逮捕记录)。缺乏显示政客因内幕交易而被捕的数据并不意味着政客没有大规模从事内幕交易。