傾き違い二本直線が連接しています。その屈折点(連接点)を特定したかったです。時系列異常検知ライブラリ(BANPEI番兵)を使いました。
一次方程式で作ったデータに対して、成功しましたが(test1.py), 実際な実験データ(時系列データ)に応用したら、失敗しました。(test2.py)。お願いですが、もっと精度いい,有効な方法を教えていただきたいです。
python
1import numpy as np 2import scipy.interpolate 3import matplotlib.pyplot as plt 4import banpei # 番兵(banpei)を利用して、異常検知します。 5 6################ 7# 変化点がある折線を作ります。 8raw_data = [] 9nx =np.linspace(0,30) 10for i in nx: 11 if i <= 20: 12 a = 0.5*(i-10) 13 else: 14 a = i-15 15 raw_data.append (a) 16################ 17# 内挿でデータ点数を増えます。 18xp=np.arange(nx[0], nx[-1], 0.1) 19rp=scipy.interpolate.splrep(nx, raw_data, s=0) 20yp=scipy.interpolate.splev(xp,rp,der=0) 21################ 22# 番兵(banpei)を利用して、異常検知します。 23model = banpei.SST(w=8) 24results = model.detect(yp) 25############### 26#グラフを表示します。 27fig=plt.figure() 28ax1 = fig.add_subplot(111) 29ax2 = ax1.twinx() 30ax1.plot(nx,raw_data) # 元データです。 31ax2.plot(xp,results,color="red") #異常検知係数です。 32plt.show() 33
python
1import numpy as np 2import scipy.interpolate 3import matplotlib.pyplot as plt 4import banpei # 番兵(banpei)を利用して、異常検知します。 5 6################ 7# 変化点がある時系列データを入力する。 8 9nx = [0,50,100,150,200,250,300,350,400,450,500, 10 550,600,650,700,750,800,850,900,950,1000, 11 1050,1100,1150,1200,1250,1300,1350,1400,1450,1500, 12 1550,1600,1650,1700,1750,1800,1850,1900,1950,2000, 13 2050,2100,2150,2200,2250,2300,2350,2400,2450,2500,2550,2600, 14 2650,2700,2750,2800,2850,2900,2950,3000,3050,3100,3150,3200, 15 3250,3300,3350,3400,3450,3500,3550,3600,3650,3700,3750,3800, 16 3850,3900,3950,4000,4050,4100,4150,4200,4250,4300,4350,4400, 17 4450,4500,4550,4600,4650,4700,4750,4800,4850,4900,4950,5000, 18 5050,5100,5150,5200,5250] 19 20raw_data = [373.766,373.796,373.826,373.86,373.891,373.923,373.954,373.985, 21 374.015,374.047,374.078,374.11,374.14,374.173,374.204,374.236, 22 374.267,374.299,374.33,374.362,374.393,374.425,374.458,374.49, 23 374.522,374.554,374.587,374.62,374.651,374.681,374.711,374.743, 24 374.776,374.807,374.837,374.867,374.9,374.932,374.964,374.996, 25 375.028,375.06,375.092,375.124,375.155,375.187,375.219,375.25, 26 375.281,375.313,375.346,375.378,375.41,375.441,375.472,375.504, 27 375.537,375.568,375.6,375.632,375.663,375.694,375.724,375.757, 28 375.788,375.821,375.851,375.882,375.914,375.944,375.974,376, 29 376.022,376.041,376.059,376.078,376.098,376.114,376.128,376.143, 30 376.158,376.172,376.19,376.205,376.22,376.234,376.245,376.257, 31 376.27,376.282,376.297,376.309,376.323,376.34,376.352,376.366, 32 376.381,376.396,376.408,376.425,376.438,376.451,376.464,376.476, 33 376.487,376.501] 34 35 36################ 37# 内挿でデータ点数を増えます。 38xp=np.arange(nx[0], nx[-1], 1) 39rp=scipy.interpolate.splrep(nx, raw_data, s=0) 40yp=scipy.interpolate.splev(xp,rp,der=0) 41################ 42# 番兵(banpei)を利用して、異常検知します。 43model = banpei.SST(w=8) 44results = model.detect(yp) 45############### 46#グラフを表示します。 47fig=plt.figure() 48ax1 = fig.add_subplot(111) 49ax2 = ax1.twinx() 50 51ax1.plot(nx,raw_data) # 元データです。 52ax2.plot(xp,results,color="red",alpha = 0.5) #異常検知係数です。 53plt.show() 54
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/03 07:33
2021/07/05 00:19 編集