【问题标题】:Anomaly detection with Python使用 Python 进行异常检测
【发布时间】:2019-04-11 19:19:16
【问题描述】:

我必须创建这种机制:我有一个包含 Git 存储库统计信息的数据集(例如每天的提交次数、每天编辑的代码行数等。不超过 4 或 5 个字段)。我必须使用异常检测算法来分析此数据集,并在检测到与正常值不同的值时发出警报。

例如:我每天结束时都会启动此算法,如果在这一天提交的次数比平时多,则必须触发警报。

我必须用 Python 来实现这个系统。

根据我在互联网上阅读的内容,要制作这个系统,您需要使用无监督机器学习。 在过去的几个月里,我一直在学习机器学习课程,并且知道如何使用 Python 库的 Sklearn(有点)。但我不是真正的机器学习专家,我不知道该怎么做。 不幸的是,在互联网上我只能找到非常理论性的教程(由数据科学家编写),我不明白我在实践中必须做什么。

有人可以告诉我该怎么做和使用什么吗?

我的问题有或多或少简单的解决方案吗? 谢谢。

【问题讨论】:

标签: python machine-learning data-science anomaly-detection


【解决方案1】:

检测异常/异常值的简单方法是使用集中趋势度量,前提是给定模态符合正态分布标准。

import numpy as np

inputs = list(map(int, input().rstrip().split()))
print('inputs = ', inputs)
print('---------------')

mean = np.mean(inputs)
std = np.std(inputs)
print('mean = {0} \nstd = {1}'.format(mean, std))
print('---------------')

thresh = float(input('Input threshold ? '))
print('---------------')

for i in range(len(inputs)):
    if inputs[i] > (mean + thresh*std) or inputs[i] < (mean - thresh*std):
        print('{0} is an outlier '.format(inputs[i]))
    else:
        print('{0} is not an outlier '.format(inputs[i]))

输出:

-998 1989 67624 -178187817 -9876 179827863
inputs =  [-998, 1989, 67624, -178187817, -9876, 179827863]
---------------
mean = 283130.8333333333 
std = 103350924.95590967
---------------
Input threshold ? 1.5
---------------
-998 is not an outlier 
1989 is not an outlier 
67624 is not an outlier 
-178187817 is an outlier 
-9876 is not an outlier 
179827863 is an outlier 

【讨论】:

    【解决方案2】:

    根据数据拟合 Gaussian Mixture ModelIsolation Forest 模型,并选择一个阈值来考虑异常情况。

    与所有此类问题一样,召回率和准确率之间存在权衡。为了评估您的解决方案,您应该通过检查来识别一些异常情况并将其标记出来。然后这些可以成为您的验证和测试集的一部分。训练集不会包含异常(或仅包含少量异常)。

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 1970-01-01
      • 2017-12-19
      • 2016-04-16
      • 2021-03-24
      • 2018-09-06
      • 2020-06-01
      • 2021-06-07
      • 2017-12-16
      相关资源
      最近更新 更多