python - 时间序列的异常值检测
问题描述
我想为时间序列生成一个非常简单的异常检测示例。所以我用一个非常明显的异常值创建了样本数据,但到目前为止我还没有找到任何可靠地检测异常值的方法。我尝试了局部异常因子、隔离森林和 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
解决方案
我想这是因为两个原因:
- 这些算法并不是专门为处理一维数据而设计的
- 它们不是为 ts 问题设计的...
您可能需要为此使用时间序列工具
推荐阅读
- python - Python 包位于 venv/lib/site-packages 文件夹中,显示为安装在 PyCharm 中,但抛出 ModuleNotFoundError
- swift - SwiftUI MacOs 选项卡
- mysql - Mysql:有没有更高效的嵌套聚合更新方式?
- node.js - express-graphql 中的 serverless vs serverfull?
- python-3.x - 如何从通过 REST API 执行的 Saltstack `cmd.run` 捕获返回码
- php - Laravel - phpunit 更新方法失败,我不知道为什么
- if-statement - google sheet - 使用 ARRAYFORMULA 对以上所有行求和
- python - 无法在 macOS“Big Sur”上通过 pip 或 conda 安装镶木地板
- python - 循环遍历多个 CSV 文件并与特定列合并 [Pandas]
- python-3.x - python3 multiprocess.pool.terminate() 不会杀死进程