github.com/numenta/NAB
即時串流資料分析演算法實驗平台
當要加入新的演算法進NAB平台測試時,你的程式必需改成下列格式:
class MyDetector(AnomalyDetector): def __init__(self, *args, **kwargs): super(MyDetector, self).__init__(*args, **kwargs) ....
def handleRecord(self, inputData): #inputData['timestamp'] #inputData['value'] self.recordCount = self.recordCount + 1 .... return (anomalyScore,)
自己原本演算法主程式是放進handleRecord函數裡,但是要改成可以一筆記錄一筆記錄收,handleRecord會被外部
的程式呼叫多次,但每次呼叫只傳一筆記錄,故inputData只有一筆資料的timestamp及value(實際資料簡化成單
一值,兩筆記錄的值越接近則記錄越一樣),而且handleRecord要直接回傳此筆記錄的anomalyScore(異常機率),
但在class裡可以自己設定陣列變數存之前傳進來的記錄。
檔案放在,如同其它detectors:
nab/detectors/MyDetector/MyDetector.py
nab/detectors/MyDetector/_init_.py
/run.py程式碼最下面的地方要加入下列程式,如同其它detectors一樣:
if "MyDetector" in args.detectors: from nab.detectors.MyDetector.MyDetector import (MyDetector)
在檔案config/thresholds.json要加入下列的參數,threshold是指anomalyScore大於多少就算異常,此參數會被
--optimize調整(在Command Line執行run.py的參數)
"MyDetector": {
"reward_low_FN_rate": {
"score": 0,
"threshold": 0.9
},
"reward_low_FP_rate": {
"score": 0,
"threshold": 0.9
},
"standard": {
"score": 0,
"threshold": 0.9
}
},
沒有留言:
張貼留言