SlideShare a Scribd company logo
異常検知と変化検知
Chapter 4 近傍法による異常検知
2015/10/7
@kenmatsu4
自己紹介
・Facebookページ
  https://www.facebook.com/matsukenbook
・Twitterアカウント
  @kenmatsu4
・Qiitaでブログを書いています(統計、機械学習、Python等)
   http://qiita.com/kenmatsu4
   (3500 contributionを超えました!)
・趣味
   - バンドでベースを弾いたりしています。
   - 主に東南アジアへバックパック旅行に行ったりします
   (カンボジア、ミャンマー、バングラデシュ、新疆ウイグル自治区 etc)
旅行の写真 : http://matsu-ken.jimdo.com
Twitterアイコン
異常検知と変化検知 第4章 近傍法による異常検知
コレですw
・ホテリングの 法の様な制約がない
 → 観測値が一定値の周りに集まって
   なくても良い
・わかりやすい
 → 「近さ」というわかりやすい概念
・なので、本質としては「距離」をどう
 定義するか、という問題。
本章で扱う「近傍法」の特徴
T2
・k近傍法
 (k-neighbor method)
・マージン最大化近傍法
 (Large-margin nearest neighbors)
本章で扱う2つの近傍法
4.1 k近傍法 :
経験分布に基づく異常判定
標本サンプル数   :
4.1.1 k近傍法: ラベルなしデータ
M
1
M
1
M
1
Data Set : D = {x(1)
, x(2)
, · · · , x(N)
}
↑このデータは「異常標本を含まない」or
       「異常標本があっても圧倒的少数」
 であるとする。
新たに取得したデータ: x0
N
特徴量数      : M
← 判定対象
経験分布
(·) は、ディラックのデルタ関数
インパルス関数
分散0の極限の正規分布
つまり
Z 1
1
(x b)f(x)dx = f(b)
を満たす (·)
1
b x
f(x)
( の時のみ1, それ以外0)x = b
pemp(x|D) =
1
N
NX
n=1
(x x(n)
)
経験分布
点があるところのみ 1/N で、それ以外は0の分布
pemp(x|D)
→ 経験されたところのみ値を持つ
pemp(x|D) =
1
N
NX
n=1
(x x(n)
)
任意の位置 を中心とした十分小さい半径 の球を
経験分布
標本位置以外で確率0というのは実用的でないので…
pemp(x|D)
"
x0
"
考え、この中で確率密度が一定と考える
経験分布
pemp(x|D)
" この球の中は
  確率密度    p(x0
)VM (", x0
)
確率密度 球の体積
の範囲に入る確率VM (", x0
)
p(x0
) ⇥ |VM (", x0
)| ⇡
Z
x2VM (",x0)
pemp(x|D)dx
経験分布
"
確率密度 球の体積
の範囲に入る確率VM (", x0
)
p(x0
) ⇥ |VM (", x0
)| ⇡
Z
x2VM (",x0)
pemp(x|D)dx
p(x0
)
経験分布
VM (", x0
)M次元球の内部の領域:
領域 に含まれる  の要素の数を とする。VM (", x0
) D k
p(x0
) ⇡
1
|VM (", x0)|
Z
x2VM (",x0)
1
N
NX
n=1
(x x(n)
)dx
p(x0
) ⇡
k
N|VM (", x0)| "
確率密度 球の体積
の範囲に入る確率VM (", x0
)
p(x0
) ⇥ |VM (", x0
)| ⇡
Z
x2VM (",x0)
pemp(x|D)dx
n次元球の体積から・・・
(定数)VM =
⇡
M
2
(M
2 ) + 1
"M
= "M
(定数)p(x0
) ⇡
k
N|VM (", x0)|
⇡
k
N
"M 1
半径 の球の体積は、 の定数倍と言える( に比例する)。"M"
よって、確率密度もこのように表せる。
全体のデータ数のうち、
半径εの球の中に含まれる
データ数の割合
"M
異常度の導入
(1.4)より異常度は
と、定義される。よって、
(定数)
・εを固定すれば、 k が小さい方が異常度が高い
・ k を固定すれば、εが大きい方が異常度が高い
これより、
a(x0
) = ln p(x0
|D)
a(x0
) = ln k + M ln " +
… (1.4)
k近傍法 (k=1のとき)
k=1とすると
となるので、最近傍の標本までの距離を基準値として
それを超えるものを異常と判定するというやり方を
採択できます。 異常 正常
x0
a(x0
) = ↵
a(x0
) > ↵
x0
a(x0
) = ↵
a(x0
) < ↵
(定数)a(x0
) = M ln " +
k近傍法 (一般の場合)
k の項が入る分、同じ ε でも異常度
が小さくなる。
a(x0
)
(定数)a(x0
) = ln k + M ln " +
ε近傍法
近傍半径 ε を定数として与える。
そのため k によって異常度が決まる。
異常 正常
x0
a(x0
) = ↵
x0
a(x0
) > ↵
a(x0
) = ln k + (定数)
ただし、個々の塊の粗密に違いがあることや、
変数の次元が高い場合に
個々の変数の寄与がかき
消されがちであるので
注意が必要。
k近傍法の特徴
k近傍法は分布が多峰的 (multimodal)でも適用が
可能。
x0
a(x0
) = ↵
手順
1. 観測データ x’ を得る
2. k が決まっているので ε が決まる
3. 異常度が閾値を超えているか判断する
x0
"
4.1.2 k近傍法: ラベルつきデータ
M
1
M
1
M
1
D = {(x(1)
, y(1)
), (x(2)
, y(2)
), · · · , (x(N)
, y(N)
)}
ラベル 0:正常, 1:異常を表すスカラーデータ
M次元ベクトル
N1
(x0
)
N0
(x0
) :正常ラベルつきのk近傍標本数
:異常ラベルつきのk近傍標本数
N0
(x0
) N1
(x0
)
4.1.2 k近傍法: ラベルつきデータ
M
1
M
1
M
1
D = {(x(1)
, y(1)
), (x(2)
, y(2)
), · · · , (x(N)
, y(N)
)}
ラベル 0:正常, 1:異常を表すスカラーデータ
M次元ベクトル
N1
(x0
)
N0
(x0
) :正常ラベルつきのk近傍標本数
:異常ラベルつきのk近傍標本数
N0
(x0
) N1
(x0
)
k=6のとき
正常:4、異常:2
p(y = 1|x0
, D) =
N1
(x0
)
k
← 近傍kのうち異常ラベルの数の割合
p(y = 0|x0
, D) =
N0
(x0
)
k
← 近傍kのうち正常ラベルの数の割合
a(x0
) = ln
p(x0
|y = 1, D)
p(x0|y = 0, D)
p(x0
|y = 0, D) =
p(y = 0|x0
, D)p(x0
)
p(y = 0)
=
p(x0
)
k
·
N0
(x0
)
⇡0
ここは共通
a(x0
) = ln
⇡0
N1
(x0
)
⇡1N0(x0)
式(4.4):異常度
ここにベイズの定理を適用。異常も同様
全標本に対する
正常標本の割合
全標本に対する
正常標本の割合
異常検知の実施
1. 近傍数 、異常判定の閾値 の候補をリストアップする。k ath
は0を中心に値を決定する。(正常、異常が一様に分布
している場合、異常度が0に近くなるため)
ath
【訓練時(事前準備)】
2.「距離」に何を使うかを決定する。基本はユークリッド
  距離をまず試して精度を評価する。
ユークリッド距離で精度が良くない場合、局所外れ値度
で距離を定義するとうまくいく場合がある。(特に、
位置によりデータの濃淡がある場合)
局所外れ値度(さわりだけ)
pp0
q
q0
データの密集度を考慮して距離を定義する。
異常検知の実施
1. 訓練データ の中から標本 を選ぶ。
【訓練実施】
D x(n)
2. 残りのN-1個の標本の中から に最も近い標本を k 個
選ぶ
x(n)
3. 式(4.4)に基づいて なら を異常と
  判定する。
a(x(n)
) > ath x(n)
4. N個の標本全てに「異常」「正常」の仕分けが済むと、
 正常標本精度、異常標本精度が算出できるので、ここから
F値 =
2r0r1
r0 + r1
を求め、 の評価値とする。(k, ath)
正常標本精度 =
正しく正常と判定した数
正常標本総数
5. 1∼4を繰り返し、最大のF値となる を選択する(k⇤
, a⇤
th)
異常検知の実施
1. 新たな観測値 に対して、最近傍 個を から選ぶ
【運用時】
x0
k⇤
D
2. なら を異常と判定する。a(x0
) > a⇤
th x0
4.2
マージン最大化近傍法
計量学習:マージン最大化近傍法
M
1
M
1
M
1
D = {(x(1)
, y(1)
), (x(2)
, y(2)
), · · · , (x(N)
, y(N)
)}
ラベル 0:正常, 1:異常を表すスカラーデータ
M次元ベクトル
ラベル付きデータ
分布の様相に応じて距離尺度をうまく調整し、精度を上げる
ことを狙った手法。
計量学習:マージン最大化近傍法
行列 A で基準化した2標本の距離
M
1
M
1
M
M
スカラーで
表す距離
2次形式!
行列 A をデータの分布をうまく表すように決める
行列 A をデータで学習させる手法を計量学習という
このとき行列 A を「リーマン計量」と呼ぶ
d2
A(x0
, x00
) = (x0
x00
)T
A(x0
x00
)
計量学習:マージン最大化近傍法
マハラノビスの距離に似ているが、これに k 近傍法を
1枚かますことがこの手法の特徴
と、単位行列にするとユークリッド距離となる。A = IM
Aは半正定値行列とする
d2
A(x0
, x00
) = (x0
x00
)T
A(x0
x00
)
d2
A(x0
, x00
) = (x0
x00
)T
IM (x0
x00
)
= (x0
x00
)T
(x0
x00
) = kx0
x00
k2
から1つ、任意の標本 を取り出したとき、
同一ラベルに属する k 個の最近傍標本を (標的近傍)
とする。
計量学習:マージン最大化近傍法
近傍数 k を決め、 を初期値とする。
【初期値】
A = IM
D
N(n)
x(n)
近傍数 k=3 のとき、青い点がN(n)
x(n)
計量学習:マージン最大化近傍法
ターゲット 同一ラベルデータ
k 近傍のデータの内、ターゲットと同一ラベルのデータ
との距離の和
(n)
1 (A) ⌘
X
i2N (n)
d2
A(x(n)
, x(i)
)
これをなるべく小さくする
最小化条件1
Aで基準化された距離
0 1 2 3 4 5 6
0
1
2
3
4
5
6
赤セルがターゲット、
グレーセルが 近傍、
k=3 の例
N (n)
計量学習:マージン最大化近傍法
条件2
ターゲットと異ラベル
標本との2乗距離[ ] ターゲットと同一ラベル
標本との2乗距離[ ]+ c2>
c
※ cは図の灰色の帯の幅に対応
計量学習:マージン最大化近傍法
最小化条件2:前ページの条件が破られている度合を最小化
x(j)
:同一ラベル k 個のデータ (j = 1, 2, · · · , k)
x(l)
:全てのデータ (l = 1, 2, · · · , N)
前ページのcはAに吸収可能のため、1とする
(n)
2 (A) ⌘
X
j2N (n)
NX
l=1
I[y(l)
6= y(n)
]
h
1 + d2
A(x(n)
, x(j)
) d2
A(x(n)
, x(l)
)
i
+
異ラベルの距離はマイナス
→ 距離が離れている方が
  良いので。
:かっこの中が成り立つとき1、それ以外0I[·]
[h]+ = max(0, h) =
(
h, h 0
0, h < 0
ターゲットと異なる
ラベルのものだけ取り出す
計量学習:マージン最大化近傍法
最小化条件2 前ページのcはAに吸収可能のため、1とする
(n)
2 (A) ⌘
X
j2N (n)
NX
l=1
I[y(l)
6= y(n)
]
h
1 + d2
A(x(n)
, x(j)
) d2
A(x(n)
, x(l)
)
i
+
異ラベルの距離はマイナス
→ 距離が離れている方が
  良いので。
ターゲットと異なる
ラベルのものだけ取り出す
ターゲットと同一ラベル
ターゲットと異なるラベル
濃いグレーの部分を
全部足し合わせる
同 異 同 同 異 異 同 異
k
n
k
k
l系
j系
N
N
マージン最大化近傍法の最適化問題
(A) ⌘
1
N
NX
n=1
h
(1 µ)
(n)
1 (A) + µ
(n)
2 (A)
i
最小化ターゲット
subject to A ⌫ 0
半正定値行列である事を表している
→ 距離が負にならない事を示している
(A) ⌘
1
N
NX
n=1
h
(n)
1 (A) +
(n)
2 (A)
i
実用上は μ=0.5として問題ないためその場合、μは下記のように
省略できる
勾配法による最適化
半正定値計画(semi-definite programing)
という最適化問題となる。
勾配法
固有値計算{ の組み合わせで解く
勾配法によるAの更新
A A ⌘
@ (A)
@A
最小化の更新式(A)
⌘ :勾配法のステップ幅 勾配法のイメージ
これを扱うには和の範囲を工夫して の中に
正の項しか入らないようにすると を外せる。
  は右図のように角をもつので
微分できない。
勾配法によるAの更新
[h]+
[h]+
→ 微分できる目的関数に対する
  勾配法との違いから、
「劣勾配法」と呼ぶのが正確
[h]+
[·]+
今日のハイライト
X ⌘ {x(1)
, x(2)
, · · · , x(N)
}
M
1
M
1
M
1@ (A)
@A
=
1
N
XCXT
M
MN
NN
N
M
M
: 及び と異なるラベルかつ、x(n)
x(j)
1 + d2
A(x(n)
, x(j)
) d2
A(x(n)
, x(l)
) > 0
である標本の集合(添え字が のもの)l
Nn,j
式(4.12)
式(4.13)
C ⌘
NX
n=1
X
j2N (n)
8
<
:
(1 µ)C(n,j)
+ µ
X
l2Nn,j
(C(n,j)
C(n,l)
)
9
=
;
今日のハイライト
標的近傍 はAの更新より変わらない。N(n)
: 及び と異なるラベルかつ、x(n)
x(j)
1 + d2
A(x(n)
, x(j)
) d2
A(x(n)
, x(l)
) > 0
である標本の集合(添え字が のもの)l
Nn,j
    のほうはAの更新で変化するNn,j
C ⌘
NX
n=1
X
j2N (n)
8
<
:
(1 µ)C(n,j)
+ µ
X
l2Nn,j
(C(n,j)
C(n,l)
)
9
=
;
C(i,j)
⌘ (ei ej)(ei ej)T
の中身
{
個
i番目
j番目
ei = (0, 0, · · · , 1, · · · , 0, 0)T
ej = (0, 0, 0, · · · , 1, · · · , 0)T
N
C(i,j)
⌘ (ei ej)(ei ej)T
1
N
1
N
N
N
i j
0 0 … 1 … -1 … 0
0 0 0 0 0 0 0 0 0
… 0 0 0 0 0 0 0 0
i 1 0 0 0 1 0 -1 0 0
… 0 0 0 0 0 0 0 0
j -1 0 0 0 -1 0 1 0 0
… 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
ei ej = (0, · · · , 1, · · · , 1, · · · , 0)T
C(i,j)
C(i,j)
今日のハイライト:確かめてみる
(n)
1 (A) ⌘
X
i2N (n)
d2
A(x(n)
, x(i)
)
M
1
1
M
M
M
行列Aで微分すると
=
X
i2N (n)
(x(n)
x(i)
)T
A(x(n)
x(i)
)
=
X
i2N (n)
x(n i)T
Ax(n i)
k近傍のデータk近傍のデータ
=
X
i2N (n)
MX
k=1
MX
l=1
aklx
(n i)
k x
(n i)
l
対称!
@
(n)
1 (A)
@akl
=
X
i2N (n)
x
(n i)
k x
(n i)
l =
X
i2N (n)
(x
(n)
k x
(i)
k )(x
(n)
l x
(i)
l )
X
i2N (n)
(x
(i)
k x
(n)
k )(x
(i)
l x
(n)
l )
なんとなく、共分散っぽいものに
見えてくる!
中心 中心
k近傍のデータ k近傍のデータ
今日のハイライト:確かめてみる
今日のハイライト:確かめてみる
(A) ⌘
1
N
NX
n=1
h
(n)
1 (A) +
(n)
2 (A)
i
=
1
N
NX
n=1
(n)
1 (A) +
1
N
NX
n=1
(n)
2 (A)
目的の最小化関数を定義し直す
この時、最初の項の行列の微分を考えるとこのようになる
= 1(A) + 2(A)
@ 1(A)
@akl
=
1
N
NX
n=1
X
i2N (n)
(x
(i)
k x
(n)
k )(x
(i)
l x
(n)
l )
C(i,j)
⌘ (ei ej)(ei ej)T
@ 1(A)
@akl
=
1
N
NX
n=1
X
i2N (n)
(x
(i)
k x
(n)
k )(x
(i)
l x
(n)
l )
@ (A)
@A
=
1
N
XCXT
今日のハイライト:確かめてみる
(n)
2 (A) ⌘
X
j2N (n)
NX
l=1
I[y(l)
6= y(n)
]
h
1 + d2
A(x(n)
, x(j)
) d2
A(x(n)
, x(l)
)
i
+
行列Aで微分すると
@
(n)
2 (A)
@apq
=
X
j2N (n)
NX
l=1
I[y(l)
6= y(n)
]

d2
A(x(n)
, x(j)
)
@apq
@d2
A(x(n)
, x(l)
)
@apq +
=
X
j2N(n)
NX
l=1
I[y(l)
6= y(n)
]
h
(x(n)
p x(j)
p )(x(n)
q x(j)
q ) (x(n)
p x(l)
p )(x(n)
q x(l)
q )
i
+
同一ラベルのk近傍が対象 異ラベルの全てが対象
同 異 同 同 異 異 同 異
k
n
k
k
l系
j系
今日のハイライト:確かめてみる
Aの固有値分解
A U[ ]+UT
式(4.12), (4.13)により行列Aが更新されたら
は負の固有値を0で置き換える 
ことを意味している
[ ]+
主成分分析で次元削減をしているのと
似たようなイメージ
A = U UT
のように固有値分解を行い、下記でAを更新する
アルゴリズム
【初期化】
近傍数 k, 係数 μ(通常0.5), ステップ幅の初期値
を与える
⌘0
とリーマン計量Aの初期値を置くA = IM
各クラスの標本数の不均衡がある場合は前処理で
是正しておく
ブートストラップ法で見かけ上の標本数を増やす、
標本数が多いクラスから間引く、等
アルゴリズム
A A ⌘
@ (A)
@A
… 最小化の更新式(A)
【反復】
A U[ ]+UT
A = U UT … 固有値計算
… 負の固有値除外
下記を実行して都度収束判定を行い、収束するまで
繰り返し実行する。収束したらその時の行列 を出力する。
ステップ幅ηは毎回値を更新する
A⇤
4.2.4 確率モデルとの関係
p(x|x(n)
, y(n)
) =
1
Zn(A, )
exp
⇢
1
2 2
d2
A(x, x(n)
)
多変量正規分布の変形
任意の標本 の近傍に下記のような確率分布を考える。x(n)
積分して1にするため
尤度は
Y
i2N (n)
1
Zn(A, )
exp
⇢
1
2 2
d2
A(x(i)
, x(n)
)
4.2.4 確率モデルとの関係
全体の対数尤度は、データ数nの和をとり、
L(A|D) =
1
2 2
NX
n=1
X
i2N (n)
d2
A(x(i)
, x(n)
) kN ln Zn(A, )
Zn()を解析的に求めるのが難しいので、マージン制約を
取り込んでいたことが、最大マージン近傍法の一つの解釈
Fin

More Related Content

異常検知と変化検知 第4章 近傍法による異常検知