はじめてのパターン認識 第5章 k最近傍法(k_nn法)

93
5k最近傍法(kNN法) 2013/9/3 @ 「はじめてのパターン認識」読書会

Upload: motoya-wakiyama

Post on 27-Dec-2014

8.173 views

Category:

Documents


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

第5章

k最近傍法(kNN法)

2013/9/3

@「はじめてのパターン認識」読書会

Page 2: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

twitterID:wwacky

8月1日から新しい職場で働いてます

最近コードを書いてない・・・

1週間後の博士論文の審査で使う発表資料がほぼ白紙で

死にそう

やばすぎて艦これ断ちするレベル

自己紹介

Page 3: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

説明のために一部順序を

少し入れ替えています

あと、図表ははじめてのパターン認識からの引用です

おことわり

Page 4: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

最近傍法って何だ

Page 5: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

最近傍法って何?

簡単に言うと

「近いデータに合わせる」

判別対象のデータが、どの

鋳型(いわゆる学習データ)

に一番近いかで判別する

コインのサイズ

コインの重量

一番近い鋳型が真、だからこれも真

Page 6: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

どうやって近さを求めるの?

一般的には

「ユークリッド距離」を使う

あるデータxと、クラスiのj番目の

データx j(i)のユークリッド距離

d(x,x j(i)) = |x-x j

(i)|

原理的には他の距離でもいい

けど、ユークリッド距離を使

うのが一般的らしい

コインのサイズ

コインの重量

この距離

Page 7: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

最近傍法の識別規則は?

other

txxd

reject

xxdi

j

i

ji

の時 識別クラス

)()(,min,minarg

コインのサイズ

コインの重量

距離が一番小さいデータが属するクラス

一番近い鋳型との距離がtより大きい

時はreject !

Page 8: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

識別規則はボロノイ図で表せる(要は可視化?)

最近傍法での判別

学習データ1

学習データ2

学習データ3

識別対象データA

Page 9: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

識別規則はボロノイ図で表せる(要は可視化?)

最近傍法での判別

データ1のボロノイ領域(支配領域)

データ3のボロノイ領域(支配領域)

データ2のボロノイ領域(支配領域)

データ1のボロノイ領域内 ↓

データ1のクラスと識別

Page 10: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

最近傍法での判別

ボロノイ境界

ボロノイ境界 各学習データから等距離の点の集合

Page 11: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

最近傍法での判別

ボロノイ境界

3,...,1 NxxS N   

ボロノイ境界

学習データxiとxjのボロノイ境界B(xi, xj)

B(xi, xj) = {x|d(xi, x) = d(xj, x)}

⇒xiとxiから等距離のxの集合

1と3の境界だと この辺も境界…?

Page 12: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

最近傍法での判別

データ1と データ3の

超平面

ボロノイ境界(を作る超平面) ベクトルを使って表現するとこうなる

上式を満たすxが表す超平面がボロノイ領域を作る

jiji

Txxnxxxnxx      ,2/,0

n

x

Page 13: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

最近傍法での判別

jiji

Txxnxxxnxx      ,2/,0

半空間(超平面のあっち側とこっち側)

超平面は、

xiを含む半空間D(xi, xj) = {x|d(xi, x) < d(xj, x)}と

xjを含む半空間D(xj, xi)に

二分割する

半空間D(1, 3)

半空間D(3, 1)

超平面

Page 14: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

最近傍法での判別

3次元で表すと超平面はこんな感じみたい

Page 15: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

最近傍法での判別

超平面だとボロノイ境界にするには

ここいらなくね?

Page 16: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

データ1とデータ2から作ったデータ1の半空間

データ1とデータ3から作ったデータ1の半空間

Page 17: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

データ1とデータ2から作ったデータ1の半空間

データ1とデータ3から作ったデータ1の半空間

重複箇所がボロノイ領域

ijSx

jii

j

xxDSxVR

,

,,

ただし、上式は開集合だから境界は含まないらしい。 境界を含める閉包の場合は以下で表現

SxVR i ,

Page 18: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

ボロノイ図またの名をボロノイモザイク

さっきの閉包を全部くっつけたのがボロノイ図

jiSxx

ji

ji

SxVRSxVRSV

,,

),(),(  

これは境界を表す

Page 19: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

当然だけど、学習データを増やすと識別性能は上昇する

当然、ケースバイケースになるだろうけど・・・

データの数と識別性能

Page 20: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

kNN法って何だ?

Page 21: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

kNN法(k最近傍法)って何?

大ざっぱに言うと、

近傍k個のデータから識別する

2クラス識別の例で考える

右図は、ユークリッド距離で

マッピングしたものと思ってくれ

クラス1鋳型

クラス2鋳型

Page 22: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

kNN法(k最近傍法)って何?

大ざっぱに言うと、

近傍k個のデータから識別する

2クラス識別の例で考える

クラス1鋳型

クラス2鋳型

識別対象データ

Page 23: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

kNN法(k最近傍法)って何?

大ざっぱに言うと、

近傍k個のデータから識別する

k=3とすると…

近傍3個の鋳型のクラスを確認

クラス1鋳型⇒2個

クラス2鋳型⇒1個

クラス1と識別

クラス1鋳型

クラス2鋳型

k=3

Page 24: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

kNN法(k最近傍法)って何?

大ざっぱに言うと、

近傍k個のデータから識別する

k=4とすると…

近傍4個の鋳型のクラスを確認

クラス1鋳型⇒2個

クラス2鋳型⇒2個

識別をリジェクト

クラス1鋳型

クラス2鋳型

k=4

ランダムでクラス1、クラス2を決めてもいいらしい

Page 25: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

kNN法(k最近傍法)って何?

大ざっぱに言うと、

近傍k個のデータから識別する

k=8とすると…

近傍8個の鋳型のクラスを確認

クラス1鋳型⇒3個

クラス2鋳型⇒5個

クラス2と識別

クラス1鋳型

クラス2鋳型

k=8

Page 26: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

kNN法の識別規則

に属する鋳型の数個の鋳型の内、クラス近傍

識別クラス

ikk

kkkk

kkk

reject

j

i

Kji

Kj

:

},...,max{},...,{

},...,max{}{

where

where

1

1

Page 27: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

kNN法の識別規則

近傍k個の鋳型の内、数が最も多いクラスjと識別する

に属する鋳型の数個の鋳型の内、クラス近傍

識別クラス

ikk

kkkk

kkk

reject

j

i

Kji

Kj

:

},...,max{},...,{

},...,max{}{

where

where

1

1

Page 28: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

kNN法の識別規則

近傍k個の鋳型の内、数が最も多いクラスが複数存在する

場合はrejectする

に属する鋳型の数個の鋳型の内、クラス近傍

識別クラス

ikk

kkkk

kkk

reject

j

i

Kji

Kj

:

},...,max{},...,{

},...,max{}{

where

where

1

1

Page 29: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

何でk個の鋳型を使うの?

最近傍法だと、他クラスの中に別クラスの鋳型が紛れてい

ると、孤立した識別境界ができる

⇒過学習するから汎化性能が低いってこと?

最近傍法(ボロノイ境界)

Page 30: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

何でk個の鋳型を使うの?

kNN法だと複数の鋳型の情報を使用するので、誤りを許容

した識別境界になる(孤立する識別境界が減る)

最近傍法(ボロノイ境界) kNN法(識別境界。k=11)

Page 31: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

最適なkはいくつ?

汎化誤差が最少となるkを求めればいい

CrossValidationなどを使ってk毎の汎化誤差を求める

汎化誤差の計測は2.2節を参照

本の例だとホールドアウト法と、一つ抜き法を使っている

kが増えた時のホールドアウト法の誤り率が高いのは、次元の呪いの

せいらしい

こういう時にkを大きくし過ぎると、▲のクラスと識別してしまうから?

Page 32: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

kNN法の弱点

処理が重い

鋳型(学習データ)を全探索するから当たり前

手法の改善

誤り削除型kNN

圧縮型kNN

分枝限定法

近似最近傍探索

次元の呪いの影響を受ける

ベイズ誤り率から分かるみたい

Page 33: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

kNN法の改善手法

Page 34: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

誤り削除型kNN法(Edited kNN)

kNNで識別境界を作成した時に、不正解の識別領域に含

まれる鋳型を削除する

削除すると識別境界が変わるので、再帰的に削除を行ったりする

こういうのを消す

Page 35: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

圧縮型kNN(Condensed kNN)

識別に関係ない鋳型を削除する

削除前と後で、誤り率が同じになるように選ぶ

こういうのを消す

Page 36: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

Page 37: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

分枝法

Page 38: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

分枝法

クラスタリングで学習データを組織化する。

階層クラスタリングを使うみたいだが、非階層クラスタリングでも効率化できるのかは不明

S1 S4

S2

S3

S6

S7 S5

Page 39: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

分枝法

クラスタリングで学習データを組織化する。

階層クラスタリングを使うみたいだが、非階層クラスタリングでも効率化できるのかは不明

S1 S4

S5

S2

S3

S6

S7

クラスタの平均ベクトルmiと、

平均ベクトルから最遠のデータとの距離diを算出

m4 m1

d5

m5

m3 d3

d4

Page 40: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

限定法

こいつの 近傍を探索

Page 41: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

限定法

一番上の階層のクラスタの平均ベクトルmi との距離を算出し、最も近いクラスタを探す

対象データとm1、m2、m3との距離を算出すると、m1が最も近い(S1が最も近い)

S1 S2

S3

m1

m3

m2

Page 42: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

限定法

S1の中のクラスタの平均ベクトルmi との距離を算出し、最も近いクラスタを探す

対象データとm4、m5との距離を算出すると、 m4が最も近い(S4が最も近い)

S1 S2

S3

S4

m4

S5

m5

Page 43: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

限定法

S4の中の学習データから最も近いデータを探す。

S4の中のだとx38が一番近い。 S1 S2

S3

S4

S4の中で最も近い。

x38のとする。

S5

Page 44: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

限定法

S4の中の学習データから最も近いデータを探す。

S4の中のだとx38が一番近い。

S4以外のクラスタのデータがもっと近かったりしないのか?

S1 S2

S3

S4

こっちのデータは?

x38 S5

Page 45: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

限定法

S4以外のクラスタのデータが、

x38より近くないか判断する。

まずはS5のデータで判断。

d(x,m5) > d(x, x38) + d5 なら、

S5の全データはx38より遠い

↓ S5を探索する必要はない

探索するデータが減らせる!

S1 S2

S3

S4

x38 S5 d5

Page 46: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

限定法

S4以外のクラスタのデータが、

x38より近くないか判断する。

まずはS5のデータで判断。

d(x,m5) > d(x, x38) + d5 なら、

S5の全データはx38より遠い

S1 S2

S3

S4

x38 S5 d5

一旦位置関係は忘れて、S5のデータが取り得る範囲を考える。

Page 47: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

限定法

S4以外のクラスタのデータが、

x38より近くないか判断する。

まずはS5のデータで判断。

d(x,m5) > d(x, x38) + d5 なら、

S5の全データはx38より遠い

S1 S2

S3

S4

x38 S5 d5

一旦位置関係は忘れて、S5のデータが取り得る範囲を考える。 d(x,m5) > d(x, x38) + d5なら、S5とx38の間に隙間ができる ⇒ S5のデータはx38のより遠い

m5

d5

x38 x

d(x, x38)

d(x, m5)

S5のデータが取り得る範囲

Page 48: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

限定法

S4以外のクラスタのデータが、

x38より近くないか判断する。

まずはS5のデータで判断。

d(x,m5) > d(x, x38) + d5 なら、

S5の全データはx38より遠い

S1 S2

S3

S4

x38 S5 d5

逆に、d(x,m5) ≦ d(x, x38) + d5だったら? ⇒S5がx38よりxに近い可能性がある。 (絶対近いとは言えないけど、 S5を調べる 必要がでてくる)

m5

d5

x38 x

d(x, x38)

d(x, m5) S5のデータが取り得る範囲

Page 49: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

分枝限定法

分枝法と限定法を用いて、近傍の探索を効率化させる

分枝法:クラスタリングによって木構造のように組織化する

限定法:分枝法で作成した木構造をもとに近傍の探索を行う

限定法

d(x,m5) > d(x, x38) + d5

d(x,m2) > d(x, x38) + d2

d(x,m3) > d(x, x38) + d3

という条件を満たせば、

x38が最近傍!

S1 S2

S3

S4

x38 S5 d5

Page 50: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

これまでの最近傍探索と考えが若干異なり、

最近傍より少し距離が遠くても許容する

Page 51: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

これまでの最近傍探索と考えが若干異なり、

最近傍より少し距離が遠くても許容する

おおざっぱに言うと、

本当はこれが最近傍だけど、

xA

xC xD

xE

xB

q

Page 52: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

これまでの最近傍探索と考えが若干異なり、

最近傍より少し距離が遠くても許容する

おおざっぱに言うと、

本当はこれが最近傍だけど、

こっちで妥協する(近似解) xA

xC xD

xE

xB

q

Page 53: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

これまでの最近傍探索と考えが若干異なり、

最近傍より少し距離が遠くても許容する

一応、どこまでも許容するんじゃなくて、最近傍の学習

データより(1+ε)倍の距離にあるデータまで許容する

xA

xB

xC xD

xE

数式で表すと、

d(q,x) ≦(1+ε)d(q,x*)

q

近似解までの距離

最近傍までの距離

d(q,x*)

d(q,x)

Page 54: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

これまでの最近傍探索と考えが若干異なり、

最近傍より少し距離が遠くても許容する

一応、どこまでも許容するんじゃなくて、最近傍の学習

データより(1+ε)倍の距離にあるデータまで許容する

xA

xB

xC xD

xE

数式で表すと、

d(q,x) ≦(1+ε)d(q,x*)

q

近似解までの距離

最近傍までの距離

d(q,x*)

d(q,x)

εは自分で決めるみたい。 クロスバリデーションとかで最適な値を決

めるとか。

Page 55: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

どうやって近似解を探すのか?

⇒「最良優良探索」を行う

xA

xB

xC xD

xE q

Page 56: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

最良優良探索

Step.1:2分木を作成

(作成方法は11章担当者が説明してくれるはず!)

xA

xB

xC xD

xE q

(A,B,C,D,E)

(A,C)

(A) (C)

(B,D,E)

(B) (D,E)

(D) (E)

A B

C

D E

Page 57: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

最良優良探索

Step.1:2分木を作成

Step.2:入力データと同じ領域内のデータxDとの距離d(q,xD)を算出

xA

xB

xC xD

xE q

A B

C

D E

d(q,xD)

Page 58: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

最良優良探索

Step.1:2分木を作成

Step.2:入力データと同じ領域内のデータxDとの距離d(q,xD)を算出

Step.3:次に近い領域Aとの距離d(q,A)を算出し、とd(q,xD)比較

xA

xB

xC xD

xE q

A B

C

D E

d(q,A)

次に進む  

が近似解DDx

Aqdxqd

),(1

),(

Page 59: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

最良優良探索

Step.1:2分木を作成

Step.2:入力データと同じ領域内のデータxDとの距離d(q,xD)を算出

Step.3:次に近い領域Aとの距離d(q,A)を算出し、とd(q,xD)比較

Step.4:領域AのデータxAとの距離d(q,xA)を算出し、d(q,xD)も含めて

距離が短い方を保存(ここではd(q,xD)の方が短いとする)

xA

xB

xC xD

xE q

A B

C

D E

d(q,xA)

Page 60: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

最良優良探索

Step.1:2分木を作成

Step.2:入力データと同じ領域内のデータxDとの距離d(q,xD)を算出

Step.3:次に近い領域Aとの距離d(q,A)を算出し、とd(q,xD)比較

Step.4:領域AのデータxAとの距離d(q,xA)を算出し、d(q,xD)も含めて

距離が短い方を保存(ここではd(q,xD)の方が短いとする)

Step.5:次に近い領域Bとの距離d(q,B)を算

出し、とd(q,xD)比較

xA

xB

xC xD

xE q

A B

C

D E

d(q,B)

次に進む  

が近似解DDx

Bqdxqd

),(1

),(

※比較対象がxDなのは、今回はxDがxAよりが近いから

Page 61: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

最良優良探索

Step.1:2分木を作成

Step.2:入力データと同じ領域内のデータxDとの距離d(q,xD)を算出

Step.3:次に近い領域Aとの距離d(q,A)を算出し、とd(q,xD)比較

Step.4:領域AのデータxAとの距離d(q,xA)を算出し、d(q,xD)も含めて

距離が短い方を保存(ここではd(q,xD)の方が短いとする)

Step.5:次に近い領域Bとの距離d(q,B)を算

出し、とd(q,xD)比較

Step.6:距離d(q,xB)を算出し、d(q,xD)と比

較して短い方を保存(ここでは

d(q,xB)の方が短いとする)

xA

xB

xC xD

xE q

A B

C

D E

d(q,xB)

Page 62: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

最良優良探索

Step.1:2分木を作成

Step.2:入力データと同じ領域内のデータxDとの距離d(q,xD)を算出

Step.3:次に近い領域Aとの距離d(q,A)を算出し、とd(q,xD)比較

Step.4:領域AのデータxAとの距離d(q,xA)を算出し、d(q,xD)も含めて

距離が短い方を保存(ここではd(q,xD)の方が短いとする)

Step.5:次に近い領域Bとの距離d(q,B)を算

出し、とd(q,xD)比較

Step.6:距離d(q,xB)を算出し、d(q,xD)と比

較して短い方を保存

xA

xB

xC xD

xE q

A B

C

D E

次に近い領域Cに対して実施 ⇒ d(q,xB)を保存して次へ

d(q,C) d(q,xC)

Page 63: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

最良優良探索

Step.1:2分木を作成

Step.2:入力データと同じ領域内のデータxDとの距離d(q,xD)を算出

Step.3:次に近い領域Aとの距離d(q,A)を算出し、とd(q,xD)比較

Step.4:領域AのデータxAとの距離d(q,xA)を算出し、d(q,xD)も含めて

距離が短い方を保存(ここではd(q,xD)の方が短いとする)

Step.5:次に近い領域Bとの距離d(q,B)を算

出し、とd(q,xD)比較

Step.6:距離d(q,xB)を算出し、d(q,xD)と比

較して短い方を保存

xA

xB

xC xD

xE q

A B

C

D E

次に近い領域Dに対して同じ処理を実施 ⇒以下の条件を満たさないので、

xB を近似解として終了

d(q,E)

次に進む  

が近似解BBx

Eqdxqd

),(1

),(

これが近似解!

Page 64: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

なんで を満たすと、近似解と言えるのか?

xA

xB

xC xD

xE q

A B

C

D E

),(1

),(Eqd

xqd B

Page 65: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

なんで を満たすと、近似解と言えるのか?

(1+ε)r = d(q, xB) として円を描く

r < d(q,E) < d(q, xE)

(1+ε)r < (1+ε)d(q,E) < (1+ε)d(q, xE)

d(q, xB) < (1+ε)d(q,E) < (1+ε)d(q, xE)

xA

xB

xC xD

xE q

A B

C

D E

),(1

),(Eqd

xqd B

(1+ε)r r

d(q,E)

発表の時は図がおかしかったので修正しました。 バランスが悪いので、できれば本の方の図を見てください

本だとr’ 本だと

d(q, xE)

Page 66: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

なんで を満たすと、近似解と言えるのか?

(1+ε)r = d(q, xB) として円を描く

r < d(q,E) < d(q, xE)

(1+ε)r < (1+ε)d(q,E) < (1+ε)d(q, xE)

d(q, xB) < (1+ε)d(q,E) < (1+ε)d(q, xE)

),(1

),(Eqd

xqd B

近似解が、厳密解の1+ε倍以内

xA

xB

xC xD

xE q

A B

C

D E

(1+ε)r r

d(q,E)

Page 67: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

近似最近傍探索

なんで を満たすと、近似解と言えるのか?

(1+ε)r = d(q, xB) として円を描く

r < d(q,E) < d(q, xE)

(1+ε)r < (1+ε)d(q,E) < (1+ε)d(q, xE)

d(q, xB) < (1+ε)d(q,E) < (1+ε)d(q, xE)

),(1

),(Eqd

xqd B

探索の 判定と同じ

),(1

),(Eqd

xqd B

xA

xB

xC xD

xE q

A B

C

D E

(1+ε)r r

d(q,E)

Page 68: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

kNN法における次元の呪い

Page 69: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

5.3節に、ベイズ誤り率の話が出てきた

のが唐突な感じが・・・

Page 70: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

5.3節に、ベイズ誤り率の話が出てきた

のが唐突な感じが・・・

最後まで読むと、次元の呪いを説明したかったからみたい

漸近過程が成り立つ場合、 鋳型の数Nが無限になると、 ベイズ誤り率の期待値ε*の下限と上限が決まる。 でも、次元が多くなると漸近過程が成り立たない! ⇒誤り率の上限が決まらないのが問題(ってことだと思う)

Page 71: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

おことわり

数式の説明は省いて、気になった点のみにしました

Page 72: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

漸近過程って?

鋳型の数が∞に近づけば、入力xと一致する鋳型が存在し

そうなので、何となくこんなもんだと思う

0,lim 1

NNNN

xxdT

の距離と、最近傍鋳型 入力

個の鋳型の集合

鋳型の数

NNNN

N

xxxxd

NT

N

11 :,

:

:

Page 73: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

漸近過程が成り立つと?

ベイズ誤り率の期待値ε*が、kNNの誤り率εkNNとの関係と

上限、下限が決まる

証明は5.3.1節を見てください!

資料作るのがめんどくさかった。すいません。質問で対応します。

多クラスの場合も成り立つみたいだけど、証明は確認してない…

*2**2

1NN1NN3NN4NN2

Page 74: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

補足をちょっとだけ

これはリジェクト時は誤りとカウントされないから

k=偶数の方が、リジェクトが良く生じる

という理解だけど、間違ってたらご指摘ください!

*2**2

1NN1NN3NN4NN2

k=偶数だと誤り率が低く k=奇数だと誤り率が高い

Page 75: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

次元が大きくなると、

漸近過程は成り立たない?

単位超球の中に鋳型が一様分布しているとする

1

Page 76: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

次元が大きくなると、

漸近過程は成り立たない?

単位超球の中に鋳型が一様分布しているとする

1 0,lim 1

NNN

NxxdT

鋳型の数Nが∞になれば、d(x, x1NN)は0になりそう (漸近過程が成り立ちそう)

Page 77: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

次元が大きくなると、

漸近過程は成り立たない?

厚さεの殻の部分にどのくらい鋳型が存在するのか?

鋳型の数は、殻の部分の体積に依存する(鋳型が一様分布なら当

然だよね!)

1 1

1-ε

Page 78: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

次元が大きくなると、

漸近過程は成り立たない?

厚さεの殻の部分にどのくらい鋳型が存在するのか?

鋳型の数は、殻の部分の体積に依存する(鋳型が一様分布なら当

然だよね!)

1 1

1-ε

殻の部分の体積比

d

d

dd

V

VV)1(1

)1(

)1()1(

Page 79: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

次元が大きくなると、

漸近過程は成り立たない?

厚さεの殻の部分にどのくらい鋳型が存在するのか?

鋳型の数は、殻の部分の体積に依存する(鋳型が一様分布なら当

然だよね!)

1 1

1-ε

殻の部分の体積比

d

d

dd

V

VV)1(1

)1(

)1()1(

単位超球内の鋳型の内、殻部分に存在する比率

Page 80: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

次元が大きくなると、

漸近過程は成り立たない?

殻の厚さε=0.1として、殻部分の鋳型の部分を計算して

みる

1 1

0.9

d = 2(2次元)だと?

1-(1 - 0.1)2 = 0.19

単位超球内の鋳型の19%が殻の中にある

Page 81: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

次元が大きくなると、

漸近過程は成り立たない?

殻の厚さε=0.1として、殻部分の鋳型の部分を計算して

みる

1 1

0.9

d = 5(5次元)だと?

1-(1 - 0.1)5 = 0.41

単位超球内の鋳型の41%が殻の中にある

Page 82: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

次元が大きくなると、

漸近過程は成り立たない?

殻の厚さε=0.1として、殻部分の鋳型の部分を計算して

みる

1 1

0.9

d = 10(10次元)だと?

1-(1 - 0.1)10 = 0.65

単位超球内の鋳型の65%が殻の中にある

Page 83: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

次元が大きくなると、

漸近過程は成り立たない?

殻の厚さε=0.1として、殻部分の鋳型の部分を計算して

みる

1 1

0.9

d = 50(50次元)だと?

1-(1 - 0.1)50 = 0.99

単位超球内の鋳型の99%が殻の中にある!

Page 84: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

どういうこっちゃ?

Page 85: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

次元が大きくなると、

漸近過程は成り立たない?

1 1

0.9

なんとなく分かるのは、

d = 50(50次元)だと、単位超球内の鋳型

の99%が殻の中にある。

これだと、漸近過程は成り立たない・・・

0,lim 1

NNNN

xxdT

Page 86: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

0,lim 1

NNNN

xxdT

*2**2

1NN1NN3NN4NN2

漸近過程がなりたつと、

ベイズ誤り率の上限と下限が決まる

Page 87: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

次元の呪い

0,lim 1

NNNN

xxdT

*2**2

1NN1NN3NN4NN2

漸近過程がなりたつと、

ベイズ誤り率の上限と下限が決まる

次元が大きいと漸近過程が成り立たない!

ということで、データの

次元は小さい方がいい。

Page 88: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

章末問題

なにそれおいしいの?

まあ解答のままになりそうですし・・・

Page 89: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

代わりに実行サンプルで

許してください

みんなこっちの方が好きでしょ?

Page 90: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

Rでボロノイ図書いてみた

#パッケージのインストール

instal l .packages("tr ipack")

l ibrary(tr ipack)

data(ir is )

ir is .vm = voronoi.mosaic (as.vector ( ir is$Sepal .Length) ,

as.vector( ir is$Sepal.Width) , duplicate="remove")

plot( ir is$Sepal.Length, ir is$Sepal.Width , pch=16)

plot.voronoi (ir is .vm, add=T)

Page 91: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

RでNN実行してみた

instal l .packages("class")

l ibrary("class")

data(ir is )

#irisデータを学習データとテストデータに分ける

train = rbind(ir is[1:25,1:4] , ir is[51:75,1:4] , ir is[101:125,1:4] )

test = rbind(ir is[26:50,1:4] , ir is[76:100,1:4] , ir is[126:150,1:4])

c = factor(c( ir is[1 :25,5], ir is[51:75,5] , ir is[101:125,5]))

levels(c) = c("se", "ve", "vi")

knn1(train, test, c) #学習と予測がセット

実行結果

Page 92: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

RでkNN実行してみた

instal l .packages("class")

l ibrary("class")

data(ir is )

train = rbind(ir is[1:25,1:4] , ir is[51:75,1:4] , ir is[101:125,1:4] )

test = rbind(ir is[26:50,1:4] , ir is[76:100,1:4] , ir is[126:150,1:4])

c = factor(c( ir is[1 :25,5], ir is[51:75,5] , ir is[101:125,5]))

levels(c) = c("se", "ve", "vi")

knn(train, test, c, k = 3, prob=TRUE) #kNNの実行

attributes( .Last .value) #詳細の表示

実行結果

knn.cv関数でクロスバリデーションも一緒にできるようだけど、挙動が謎だった・・・

Page 93: はじめてのパターン認識 第5章 k最近傍法(k_nn法)

ちなみに

Scikit-learn(Python)でもできる。

実行サンプル付けようとしたけど力尽きた。

(すいません)