使用 Python 进行异常检测
Anomaly detection with Python
我必须创建这个机制:我有一个包含 Git 存储库统计信息的数据集(例如每天的提交数、每天编辑的代码行数等。不超过4 或 5 个字段)。我必须使用异常检测算法来分析此数据集,并在检测到与正常值不同的值时发出警报。
例如:我每天结束时都会启动这个算法,如果这一天的提交比平时多很多,就必须触发警报。
我必须用Python来实现这个系统。
根据我在互联网上阅读的内容,要制作此系统,您需要使用无监督机器学习。
在过去的几个月里,我一直在学习机器学习课程,我知道如何使用 Python 库的 Sklearn(有点)。但我不是真正的机器学习专家,我不知道该怎么做。
不幸的是,在互联网上我只能找到非常理论的教程(由数据科学家编写)并且我不明白我在实践中必须做什么。
有人可以告诉我该做什么和使用什么吗?
我的问题是否有或多或少简单的解决方案?
谢谢
在数据上拟合 Gaussian Mixture Model or Isolation Forest 模型,select 将什么视为异常的阈值。
与所有此类问题一样,召回率和准确率之间存在权衡。为了评估您的解决方案,您应该通过检查来识别一些异常并将它们标记为异常。这些可以成为您的验证和测试集的一部分。训练集不会包含异常(或只有少量异常)。
检测异常/离群值的简单方法是使用集中趋势的度量,前提是给定的模态符合正态分布的标准。
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
我必须创建这个机制:我有一个包含 Git 存储库统计信息的数据集(例如每天的提交数、每天编辑的代码行数等。不超过4 或 5 个字段)。我必须使用异常检测算法来分析此数据集,并在检测到与正常值不同的值时发出警报。
例如:我每天结束时都会启动这个算法,如果这一天的提交比平时多很多,就必须触发警报。
我必须用Python来实现这个系统。
根据我在互联网上阅读的内容,要制作此系统,您需要使用无监督机器学习。 在过去的几个月里,我一直在学习机器学习课程,我知道如何使用 Python 库的 Sklearn(有点)。但我不是真正的机器学习专家,我不知道该怎么做。 不幸的是,在互联网上我只能找到非常理论的教程(由数据科学家编写)并且我不明白我在实践中必须做什么。
有人可以告诉我该做什么和使用什么吗?
我的问题是否有或多或少简单的解决方案? 谢谢
在数据上拟合 Gaussian Mixture Model or Isolation Forest 模型,select 将什么视为异常的阈值。
与所有此类问题一样,召回率和准确率之间存在权衡。为了评估您的解决方案,您应该通过检查来识别一些异常并将它们标记为异常。这些可以成为您的验证和测试集的一部分。训练集不会包含异常(或只有少量异常)。
检测异常/离群值的简单方法是使用集中趋势的度量,前提是给定的模态符合正态分布的标准。
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