【发布时间】:2011-01-19 04:45:09
【问题描述】:
我有一个场景,我有几千个数据实例。数据本身表示为单个整数值。我希望能够检测到实例何时是极端异常值。
例如,使用以下示例数据:
a = 10
b = 14
c = 25
d = 467
e = 12
d 显然是异常,我想基于此执行特定操作。
我很想尝试使用我对特定领域的了解来检测异常。例如,找出有用的平均值的距离,并根据启发式进行检查。但是,我认为如果我研究更通用、更强大的异常检测技术可能会更好,因为它们背后有一些理论。
由于我的数学工作知识有限,我希望找到一种简单的技术,例如使用标准差。希望数据的单维性质会使这成为一个相当普遍的问题,但如果需要更多关于该场景的信息,请发表评论,我会提供更多信息。
编辑:我想我会添加有关数据的更多信息以及我尝试过的方法,以防它使一个答案比另一个答案更正确。
这些值都是正数且非零。我希望这些值将形成正态分布。这种期望是基于对领域的直觉而不是通过分析,如果这不是一件坏事,请告诉我。在聚类方面,除非还有标准算法来选择 k 值,否则我会发现很难将这个值提供给 k 均值算法。
我想对异常值/异常采取的措施是将其呈现给用户,并建议将数据点基本上从数据集中删除(我不会讨论他们将如何做到这一点,但是它对我的域有意义),因此它不会用作另一个函数的输入。
到目前为止,我已经在有限的数据集上尝试了三西格玛和 IQR 异常值测试。 IQR 标记不够极端的值,三西格玛指出更符合我对域的直觉的实例。
有关算法、技术或资源链接的信息以了解此特定场景是有效且受欢迎的答案。
对于简单的一维数据,推荐的异常检测技术是什么?
【问题讨论】:
-
不要低估科学知识的价值。黑盒程序很少是要走的路。尝试用简单的统计数据来表达你的科学知识。
-
@Tristan:您是说您认为我应该尝试提出一个模型,该模型具有一定的统计学基础,但最终是针对我的问题领域的?
-
我只是说你对什么是合理的(即生成好数据和坏数据的模型)的了解是重要的信息。您应该设计一个程序,例如使用 IQR,这是由您对该领域的科学知识所激发的。我不喜欢 k-means 之类的东西,因为在我看来,它没有很好的动力,而且天生不灵活。
标签: machine-learning classification