【问题标题】:How to treat outliers if you have data set with ~2,000 features and can't look at each feature individually如果您的数据集包含约 2,000 个特征并且无法单独查看每个特征,如何处理异常值
【发布时间】:2019-12-03 03:30:42
【问题描述】:
我想知道如何大规模处理异常值。根据我的经验,我通常需要从一开始就了解为什么会有异常值。是什么原因造成的,是否有任何模式,或者它只是随机发生。我知道,理论上,我们通常将异常值定义为 3 个标准差之外的数据点。但是在数据大到无法逐个处理每个特征的情况下,由于稀疏性不知道 3 标准差规则是否适用,我们如何最有效地处理异常值。
我对高维数据的直觉是数据是稀疏的,因此“异常值”的定义更难确定。你们是否认为我们可以使用对异常值更健壮的 ML 算法(基于树的模型、健壮的 SVM 等)而不是在预处理步骤中尝试处理异常值?如果我们真的想治疗它,最好的方法是什么?
【问题讨论】:
标签:
machine-learning
data-science
outliers
data-science-experience
【解决方案1】:
我将首先提出一个理解数据的框架。想象一下,你收到了一个数据集,但没有解释它是什么。分析实际上可以用来让我们理解。通常行是关于观察的某种类型的观察和列参数。您首先要为您要实现的目标制定一个框架。现在事情正在发生,所有数据中心都围绕着人们的兴趣……这就是我们决定以某种格式记录它的原因。鉴于此,我们最感兴趣的是:
1.) 对象
2.) 对象的属性
3.) 对象的行为
4.) 对象的偏好
4.) 对象随时间的行为和偏好
5.) 对象与其他对象的关系
6.) 属性、行为、偏好等对象对对象的影响
所以您想要识别这些项目。因此,您打开一个数据集,也许您会立即识别出一个时间戳。然后,您会看到一些分类变量并开始对一对一、一对多、多对多进行关系分析。然后确定连续变量。所有这些都为识别异常值奠定了基础。
如果我们正在评估一段时间内的对象......是罕见的事件,表示很少发生的事情,但我们想知道。森林火灾是异常事件……但它们是非常令人担忧的事件。如果我正在分析机器数据并遇到罕见事件,但这些罕见事件与机器故障有关,那么这很重要。基本上......罕见的事件参数是否表明它与您关心的事物相关?
现在,如果您的维度太多以至于您判断上述方法不可行,那么您正在寻找降维替代方案。我目前正在使用单值分解作为技术。我已经看到使用 25% 的数据实现相同水平的预测能力的情况。这是我最后的想法;找到一个标记来决定异常值是否重要。
先将它们留在其中,然后开始分析,然后在移除它们的情况下再次运行工作。有什么影响。我相信,当您有疑问时,只需两者都做,看看结果有多么不同。如果差别不大,也许你就可以走了。如果关注点存在显着差异,那么您希望对异常值的发生采取基于证据的方法。仅仅因为它在您的数据中很少见并不意味着它很罕见。想想某些被低估的犯罪(通过逮捕记录)。缺乏显示政客因内幕交易被捕的数据并不意味着政客没有进行大规模的内幕交易。