[[k-最近傍法]]を用いて、[[異常検知]]を行う。
---
[[入門 機械学習による異常検知]] 7章「時系列データの異常検知」
1. 時系列をスライド窓による部分時系列のベクトル集合へ変換。
2. $D$(検証用時系列)の各要素 $x^{(t)}$について以下を行う
a) 距離の計算: $D_{tr}$(訓練用時系列)の各と$x^{t}$の距離を計算
b) スコアの計算: a)で求めた距離のうち最小のものをk個選び、異常度を計算し、記憶する
3. 異常度が最大のものを異常部位として列挙する
- 距離については、ユークリッド距離、[[マハラノビス距離]]、pノルム、[[動的時間伸縮法]]による類似度を使う。
- 異常度については、$k = 1$とした上で、最近傍まどの距離そのものを異常度とすることが多い。
- 課題は、ノイズに弱いこと。
- [[特異スペクトル変換法]] でノイズを除去する。
---
[k近傍法による異常検知のライブラリをmrubyで作ってみた - Fire Engine](https://blog.tsurubee.tech/entry/2018/04/01/184806)
k近傍法を言葉で簡単に説明すると、「各点から最も近いデータへの距離を計算することで異常度を算出する手法」です。
パラメータ
- k
- ウィンドウ幅
- 異常度の閾値
[mruby-knn-detector/knn.rb at master · tsurubee/mruby-knn-detector · GitHub](https://github.com/tsurubee/mruby-knn-detector/blob/master/mrblib/knn.rb)
- 訓練用時系列と検証用時系列のウィンドウ(ベクトル)集合は同じものを使う
- 全ウィンドウに対してそれぞれのウィンドウに最も近いウィンドウまでの距離集合を算出する
---
[異常検知(3)データがガウス分布から外れていても使える、k近傍法 - Qiita](https://qiita.com/makotoito/items/1d198b3e54cf8d3b0009)
knnで求めた異常度がしたがう確率分布に関する考察が書かれている。