时间序列的异常值检测

时间:2019-09-14 18:19:35

标签: python numpy matplotlib knn

我想生成一个非常简单的时间序列异常检测示例。因此,我创建了带有一个非常明显的异常值的样本数据,但是到目前为止,我还没有任何方法可以可靠地检测到异常值。我尝试了局部离群因子,隔离林和k个最近的邻居。根据我的阅读,这些方法中至少有一种是合适的。我还尝试调整参数,但这并没有真正的帮助。

我在这里犯什么错误?方法不合适吗?

下面是一个代码示例。

谢谢!

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(1)

t=np.linspace(0,10,101).reshape(-1,1)
y_test=0.5+t+t**2+2*np.random.randn(len(t),1)

y_test[10]=y_test[10]*7

plt.figure(1)
plt.plot(t,y_test)
plt.show;

from sklearn.neighbors import LocalOutlierFactor

clf=LocalOutlierFactor(contamination='auto')
pred=clf.fit_predict(y_test)

plt.figure(2)
plt.plot(t[pred==1],y_test[pred==1],'bx')
plt.plot(t[pred==-1],y_test[pred==-1],'ro')
plt.show

from sklearn.ensemble import IsolationForest

clf=IsolationForest(behaviour='new',contamination='auto')
pred=clf.fit_predict(y_test)

plt.figure(3)
plt.plot(t[pred==1],y_test[pred==1],'bx')
plt.plot(t[pred==-1],y_test[pred==-1],'ro')
plt.show

from pyod.models.knn import KNN

clf = KNN()
clf.fit(y_test)
pred=clf.predict(y_test)

plt.figure(4)
plt.plot(t[pred==0],y_test[pred==0],'bx')
plt.plot(t[pred==1],y_test[pred==1],'ro')
plt.show

1 个答案:

答案 0 :(得分:0)

我猜是因为两个原因:

  • 这些算法并非专门用于处理一维数据
  • 它们不是为ts问题设计的...

您可能需要使用时间序列工具