Algorithm 检测异常的好算法是什么? 背景

Algorithm 检测异常的好算法是什么? 背景,algorithm,machine-learning,prediction,black-box,Algorithm,Machine Learning,Prediction,Black Box,问题是: 一个黑盒子每天输出一个新的数字 这些数字已经记录了一段时间 检测黑匣子中的新数字何时超出在一段时间内建立的数字模式 数字是整数,时间段是一年 问题: 什么算法可以识别数字中的模式 模式可能很简单,比如总是上升或者总是下降,或者数字可能在一个狭窄的范围内,等等 思想 我有一些想法,但不确定最佳方法,或现有的解决方案: 机器学习算法 神经网络 将正常数字和异常数字进行分类 统计分析 您可以尝试使用直线拟合预测,看看它是如何运行的,用您选择的语言实现它将相当容易。 在对数据拟合一条直线后,

问题是:

  • 一个黑盒子每天输出一个新的数字
  • 这些数字已经记录了一段时间
  • 检测黑匣子中的新数字何时超出在一段时间内建立的数字模式
  • 数字是整数,时间段是一年

    问题: 什么算法可以识别数字中的模式

    模式可能很简单,比如总是上升或者总是下降,或者数字可能在一个狭窄的范围内,等等

    思想 我有一些想法,但不确定最佳方法,或现有的解决方案:

    • 机器学习算法
    • 神经网络
    • 将正常数字和异常数字进行分类
    • 统计分析

    您可以尝试使用直线拟合预测,看看它是如何运行的,用您选择的语言实现它将相当容易。 在对数据拟合一条直线后,您可以计算该直线的平均值。 如果新点位于标准偏差的+-线上,则不应将其视为异常

    是处理此类数据时想到的另一种技术

    你也可以去看看。这是一种机器学习技术,可用于检测较大数据集中的差异


    听起来是个有趣的问题!祝你好运

    你提到的所有技巧都没有什么神奇之处。我认为你应该首先尝试缩小你可能遇到的典型异常,这有助于保持事情的简单

    然后,您可能需要计算与这些特征相关的导出量。例如:“我想检测突然改变方向的数字”=>computeu_{n+1}-u_n,并期望它有常数符号,或者落在某个范围内。您可能希望保持这种灵活性,并允许您的代码设计具有可扩展性(如果您使用OOP,策略模式可能值得一看)

    然后,当你有一些感兴趣的导出量时,你对它们进行统计分析。例如,对于导出的量a,您假设它应该具有某种分布P(a,b)(均匀([a,b]),或β(a,b),可能更复杂,您将先验定律应用于a,b,并根据连续信息调整它们。然后,最后一点所提供信息的后验概率应该会让你对它是否正常有所了解。每一步的后验定律和先验定律之间的相对熵也是一件值得监测的事情。有关更多信息,请参阅一本关于贝叶斯方法的书


    如果您想检测异常值,我认为复杂的传统机器学习(感知器层或仅引用SVM)没有什么意义。当对已知相当干净的数据进行分类时,这些方法非常有效。

    对数据进行聚类

    如果您不知道数据将有多少种模式,请使用高斯混合模型(GMM)和评分函数(例如,贝叶斯信息准则(BIC)),以便自动检测数据中可能的聚类数。如果您不知道
    k
    可能是什么值,我建议您使用此方法而不是k-means。一旦您为过去一年的数据构建了GMM,给定一个新的数据点
    x
    ,您就可以计算它由任何一个集群生成的概率(由GMM中的高斯模型建模)。如果您的新数据点被任何一个集群生成的概率很低,那么它很可能是一个真正的异常值

    如果这听起来有点太复杂,您会很高兴地知道,在R的优秀软件包中为您实现了自动集群识别的整个GMM+BIC过程。我已经多次使用它来解决这些问题,取得了巨大的成功


    它不仅允许您识别异常值,而且如果您在某个时候需要此功能(或需要此功能),您还可以在异常值点上设置p值。

    您可能想在这里问这个问题:。如果没有关于黑匣子的一些信息,我怀疑此问题是否可以解决。没有任何机器学习算法会告诉你,例如,在一系列1000个数字中,只有一个不是质数。@nikie:我对能在最广泛的情况下工作的解决方案感兴趣。他们中很可能没有人能抓住你所描述的例子。@Joseph Garvin:这样不行。你必须对你的数据做出一些假设。如果你不这样做,每一个可能的数字序列都会像下一个一样。在那个前提下不可能做任何预测。你没有比瞎猜更好的了。