SlideShare a Scribd company logo
1 of 93
Download to read offline
第5章
k最近傍法(kNN法)
2013/9/3
@「はじめてのパターン認識」読書会
twitterID:wwacky
8月1日から新しい職場で働いてます
最近コードを書いてない・・・
1週間後の博士論文の審査で使う発表資料がほぼ白紙で
死にそう
 やばすぎて艦これ断ちするレベル
自己紹介
説明のために一部順序を
少し入れ替えています
あと、図表ははじめてのパターン認識からの引用です
おことわり
最近傍法って何だ
最近傍法って何?
簡単に言うと
「近いデータに合わせる」
判別対象のデータが、どの
鋳型(いわゆる学習データ)
に一番近いかで判別する
コインのサイズ
コインの重量
一番近い鋳型が真、
だからこれも真
真
偽
どうやって近さを求めるの?
一般的には
「ユークリッド距離」を使う
あるデータxと、クラスiのj番目の
データxj
(i)のユークリッド距離
d(x,xj
(i)) = |x-xj
(i)|
 原理的には他の距離でもいい
けど、ユークリッド距離を使
うのが一般的らしい
コインのサイズ
コインの重量
真
偽
この距離
最近傍法の識別規則は?
   


 

other
txxd
reject
xxd
i
j
i
j
i
の時 
識別クラス
)()(
,min,minarg
コインのサイズ
コインの重量
真
偽
距離が一番小さいデータ
が属するクラス
一番近い鋳型との
距離がtより大きい
時はreject !
識別規則はボロノイ図で表せる(要は可視化?)
最近傍法での判別
学習データ1
学習データ2
学習データ3
識別対象データA
識別規則はボロノイ図で表せる(要は可視化?)
最近傍法での判別
データ1のボロノイ
領域(支配領域)
データ3のボロノイ
領域(支配領域)
データ2のボロノイ
領域(支配領域)
データ1のボロノイ領域内
↓
データ1のクラスと識別
最近傍法での判別
ボロノイ境界
ボロノイ境界
各学習データから等距離の点の集合
最近傍法での判別
ボロノイ境界
   3,...,1  NxxS N   
ボロノイ境界
学習データxiとxjのボロノイ境界B(xi, xj)
B(xi, xj) = {x|d(xi, x) = d(xj, x)}
⇒xiとxiから等距離のxの集合
1と3の境界だと
この辺も境界…?
最近傍法での判別
データ1と
データ3の
超平面
ボロノイ境界(を作る超平面)
ベクトルを使って表現するとこうなる
上式を満たすxが表す超平面がボロノイ領域を作る
     jiji
T
xxnxxxnxx       ,2/,0
n
x
最近傍法での判別
     jiji
T
xxnxxxnxx       ,2/,0
半空間(超平面のあっち側とこっち側)
超平面は、
xiを含む半空間D(xi, xj) = {x|d(xi, x) < d(xj, x)}と
xjを含む半空間D(xj, xi)に
二分割する
半空間
D(1, 3)
半空間
D(3, 1)
超平面
最近傍法での判別
3次元で表すと超平面はこんな感じみたい
最近傍法での判別
超平面だとボロノイ
境界にするには
ここいらなくね?
データ1とデータ2から
作ったデータ1の半空間
データ1とデータ3から
作ったデータ1の半空間
データ1とデータ2から
作ったデータ1の半空間
データ1とデータ3から
作ったデータ1の半空間
重複箇所がボロノイ領域
    ijSx
jii
j
xxDSxVR


,
,,
ただし、上式は
開集合だから境
界は含まないら
しい。
境界を含める閉
包の場合は以下
で表現
 SxVR i ,
ボロノイ図またの名をボロノイモザイク
さっきの閉包を全部くっつけたのがボロノイ図
   jiSxx
ji
ji
SxVRSxVRSV


,,
),(),(  
これは境界を表す
当然だけど、学習データを増やすと識別性能は上昇する
 当然、ケースバイケースになるだろうけど・・・
データの数と識別性能
kNN法って何だ?
kNN法(k最近傍法)って何?
大ざっぱに言うと、
近傍k個のデータから識別する
2クラス識別の例で考える
右図は、ユークリッド距離で
マッピングしたものと思ってくれ
クラス1鋳型
クラス2鋳型
kNN法(k最近傍法)って何?
大ざっぱに言うと、
近傍k個のデータから識別する
2クラス識別の例で考える
クラス1鋳型
クラス2鋳型
識別対象データ
kNN法(k最近傍法)って何?
大ざっぱに言うと、
近傍k個のデータから識別する
k=3とすると…
近傍3個の鋳型のクラスを確認
クラス1鋳型⇒2個
クラス2鋳型⇒1個
クラス1と識別 クラス1鋳型
クラス2鋳型
k=3
kNN法(k最近傍法)って何?
大ざっぱに言うと、
近傍k個のデータから識別する
k=4とすると…
近傍4個の鋳型のクラスを確認
クラス1鋳型⇒2個
クラス2鋳型⇒2個
識別をリジェクト クラス1鋳型
クラス2鋳型
k=4
ランダムでクラス1、クラス2を決めてもいいらしい
kNN法(k最近傍法)って何?
大ざっぱに言うと、
近傍k個のデータから識別する
k=8とすると…
近傍8個の鋳型のクラスを確認
クラス1鋳型⇒3個
クラス2鋳型⇒5個
クラス2と識別 クラス1鋳型
クラス2鋳型
k=8
kNN法の識別規則
に属する鋳型の数個の鋳型の内、クラス近傍
識別クラス
ikk
kkkk
kkk
reject
j
i
Kji
Kj
:
},...,max{},...,{
},...,max{}{
where
where
1
1






kNN法の識別規則
近傍k個の鋳型の内、数が最も多いクラスjと識別する
に属する鋳型の数個の鋳型の内、クラス近傍
識別クラス
ikk
kkkk
kkk
reject
j
i
Kji
Kj
:
},...,max{},...,{
},...,max{}{
where
where
1
1






kNN法の識別規則
近傍k個の鋳型の内、数が最も多いクラスが複数存在する
場合はrejectする
に属する鋳型の数個の鋳型の内、クラス近傍
識別クラス
ikk
kkkk
kkk
reject
j
i
Kji
Kj
:
},...,max{},...,{
},...,max{}{
where
where
1
1






何でk個の鋳型を使うの?
最近傍法だと、他クラスの中に別クラスの鋳型が紛れてい
ると、孤立した識別境界ができる
⇒過学習するから汎化性能が低いってこと?
最近傍法(ボロノイ境界)
何でk個の鋳型を使うの?
kNN法だと複数の鋳型の情報を使用するので、誤りを許容
した識別境界になる(孤立する識別境界が減る)
最近傍法(ボロノイ境界) kNN法(識別境界。k=11)
最適なkはいくつ?
汎化誤差が最少となるkを求めればいい
CrossValidationなどを使ってk毎の汎化誤差を求める
 汎化誤差の計測は2.2節を参照
 本の例だとホールドアウト法と、一つ抜き法を使っている
 kが増えた時のホールドアウト法の誤り率が高いのは、次元の呪いの
せいらしい
こういう時にkを大きく
し過ぎると、▲のクラス
と識別してしまうから?
kNN法の弱点
処理が重い
 鋳型(学習データ)を全探索するから当たり前
 手法の改善
 誤り削除型kNN
 圧縮型kNN
 分枝限定法
 近似最近傍探索
次元の呪いの影響を受ける
 ベイズ誤り率から分かるみたい
kNN法の改善手法
誤り削除型kNN法(Edited kNN)
kNNで識別境界を作成した時に、不正解の識別領域に含
まれる鋳型を削除する
 削除すると識別境界が変わるので、再帰的に削除を行ったりする
こういうのを消す
圧縮型kNN(Condensed kNN)
識別に関係ない鋳型を削除する
 削除前と後で、誤り率が同じになるように選ぶ
こういうのを消す
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
分枝法
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
分枝法
クラスタリングで学習データ
を組織化する。
階層クラスタリングを使うみた
いだが、非階層クラスタリング
でも効率化できるのかは不明
S1
S4
S2
S3
S6
S7S5
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
分枝法
クラスタリングで学習データ
を組織化する。
階層クラスタリングを使うみた
いだが、非階層クラスタリング
でも効率化できるのかは不明
S1
S4
S5
S2
S3
S6
S7
クラスタの平均ベクトルmiと、
平均ベクトルから最遠のデー
タとの距離diを算出
m4
m1
d5
m5
m3
d3
d4
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
限定法
こいつの
近傍を探索
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
限定法
一番上の階層のクラスタの平
均ベクトルmi との距離を算出
し、最も近いクラスタを探す
対象データとm1、m2、m3との
距離を算出すると、m1が最も
近い(S1が最も近い)
S1
S2
S3
m1
m3
m2
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
限定法
S1の中のクラスタの平均ベク
トルmi との距離を算出し、最
も近いクラスタを探す
対象データとm4、m5との距離
を算出すると、 m4が最も近
い(S4が最も近い)
S1
S2
S3
S4
m4
S5
m5
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
限定法
S4の中の学習データから最も
近いデータを探す。
S4の中のだとx38が一番近い。S1
S2
S3
S4
S4の中で最も近い。
x38のとする。
S5
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
限定法
S4の中の学習データから最も
近いデータを探す。
S4の中のだとx38が一番近い。
S4以外のクラスタのデータが
もっと近かったりしないの
か?
S1
S2
S3
S4
こっちのデータは?
x38
S5
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
限定法
S4以外のクラスタのデータが、
x38より近くないか判断する。
まずはS5のデータで判断。
d(x,m5) > d(x, x38) + d5 なら、
S5の全データはx38より遠い
↓
S5を探索する必要はない
探索するデータが減らせる!
S1
S2
S3
S4
x38
S5d5
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
限定法
S4以外のクラスタのデータが、
x38より近くないか判断する。
まずはS5のデータで判断。
d(x,m5) > d(x, x38) + d5 なら、
S5の全データはx38より遠い
S1
S2
S3
S4
x38
S5d5
一旦位置関係は忘れて、S5のデータが取り得
る範囲を考える。
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
限定法
S4以外のクラスタのデータが、
x38より近くないか判断する。
まずはS5のデータで判断。
d(x,m5) > d(x, x38) + d5 なら、
S5の全データはx38より遠い
S1
S2
S3
S4
x38
S5d5
一旦位置関係は忘れて、S5のデータが取り得
る範囲を考える。
d(x,m5) > d(x, x38) + d5なら、S5とx38の間に隙
間ができる ⇒ S5のデータはx38のより遠い
m5
d5
x38 x
d(x, x38)
d(x, m5)
S5のデータが
取り得る範囲
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
限定法
S4以外のクラスタのデータが、
x38より近くないか判断する。
まずはS5のデータで判断。
d(x,m5) > d(x, x38) + d5 なら、
S5の全データはx38より遠い
S1
S2
S3
S4
x38
S5d5
逆に、d(x,m5) ≦ d(x, x38) + d5だったら?
⇒S5がx38よりxに近い可能性がある。
(絶対近いとは言えないけど、 S5を調べる
必要がでてくる)
m5
d5
x38 x
d(x, x38)
d(x, m5)S5のデータが
取り得る範囲
分枝限定法
分枝法と限定法を用いて、近傍の探索を効率化させる
 分枝法:クラスタリングによって木構造のように組織化する
 限定法:分枝法で作成した木構造をもとに近傍の探索を行う
限定法
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
S5d5
近似最近傍探索
これまでの最近傍探索と考えが若干異なり、
最近傍より少し距離が遠くても許容する
近似最近傍探索
これまでの最近傍探索と考えが若干異なり、
最近傍より少し距離が遠くても許容する
おおざっぱに言うと、
本当はこれが最
近傍だけど、
xA
xC
xD
xE
xB
q
近似最近傍探索
これまでの最近傍探索と考えが若干異なり、
最近傍より少し距離が遠くても許容する
おおざっぱに言うと、
本当はこれが最
近傍だけど、
こっちで妥協する(近似解)
xA
xC
xD
xE
xB
q
近似最近傍探索
これまでの最近傍探索と考えが若干異なり、
最近傍より少し距離が遠くても許容する
一応、どこまでも許容するんじゃなくて、最近傍の学習
データより(1+ε)倍の距離にあるデータまで許容する
xA
xB
xC
xD
xE
数式で表すと、
d(q,x) ≦(1+ε)d(q,x*)
q
近似解までの
距離
最近傍までの
距離
d(q,x*)
d(q,x)
近似最近傍探索
これまでの最近傍探索と考えが若干異なり、
最近傍より少し距離が遠くても許容する
一応、どこまでも許容するんじゃなくて、最近傍の学習
データより(1+ε)倍の距離にあるデータまで許容する
xA
xB
xC
xD
xE
数式で表すと、
d(q,x) ≦(1+ε)d(q,x*)
q
近似解までの
距離
最近傍までの
距離
d(q,x*)
d(q,x)
εは自分で決めるみたい。
クロスバリデーションとかで最適な値を決
めるとか。
近似最近傍探索
どうやって近似解を探すのか?
⇒「最良優良探索」を行う
xA
xB
xC
xD
xE
q
近似最近傍探索
最良優良探索
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
近似最近傍探索
最良優良探索
Step.1:2分木を作成
Step.2:入力データと同じ領域内のデータxDとの距離d(q,xD)を算出
xA
xB
xC
xD
xE
q
A B
C
D E
d(q,xD)
近似最近傍探索
最良優良探索
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)













 次に進む  
が近似解DD
x
Aqd
xqd
),(
1
),(

近似最近傍探索
最良優良探索
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)
近似最近傍探索
最良優良探索
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)













 次に進む  
が近似解DD
x
Bqd
xqd
),(
1
),(

※比較対象がxDなのは、今回はxDがxAよりが
近いから
近似最近傍探索
最良優良探索
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)
近似最近傍探索
最良優良探索
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)
近似最近傍探索
最良優良探索
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)













 次に進む  
が近似解BB
x
Eqd
xqd
),(
1
),(

これが近似解!
近似最近傍探索
なんで を満たすと、近似解と言えるのか?
xA
xB
xC
xD
xE
q
A B
C
D E
),(
1
),(
Eqd
xqd B


近似最近傍探索
なんで を満たすと、近似解と言えるのか?
(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)
近似最近傍探索
なんで を満たすと、近似解と言えるのか?
(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)
近似最近傍探索
なんで を満たすと、近似解と言えるのか?
(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)
kNN法における次元の呪い
5.3節に、ベイズ誤り率の話が出てきた
のが唐突な感じが・・・
5.3節に、ベイズ誤り率の話が出てきた
のが唐突な感じが・・・
最後まで読むと、次元の呪いを説明したかったからみたい
漸近過程が成り立つ場合、
鋳型の数Nが無限になると、
ベイズ誤り率の期待値ε*の下限と上限が決まる。
でも、次元が多くなると漸近過程が成り立たない!
⇒誤り率の上限が決まらないのが問題(ってことだと思う)
おことわり
数式の説明は省いて、気になった点のみにしました
次元の呪い
漸近過程って?
鋳型の数が∞に近づけば、入力xと一致する鋳型が存在し
そうなので、何となくこんなもんだと思う
  0,lim 1 

NNN
N
xxdT
  の距離と、最近傍鋳型 入力
個の鋳型の集合
鋳型の数
NNNN
N
xxxxd
NT
N
11 :,
:
:
次元の呪い
漸近過程が成り立つと?
ベイズ誤り率の期待値ε*が、kNNの誤り率εkNNとの関係と
上限、下限が決まる
 証明は5.3.1節を見てください!
 資料作るのがめんどくさかった。すいません。質問で対応します。
 多クラスの場合も成り立つみたいだけど、証明は確認してない…
*2**
2
1
NN1NN3NN4NN2   
次元の呪い
補足をちょっとだけ
これはリジェクト時は誤りとカウントされないから
k=偶数の方が、リジェクトが良く生じる
という理解だけど、間違ってたらご指摘ください!
*2**
2
1
NN1NN3NN4NN2   
k=偶数だと誤り率が低く k=奇数だと誤り率が高い
次元の呪い
次元が大きくなると、
漸近過程は成り立たない?
単位超球の中に鋳型が一様分布しているとする
1
次元の呪い
次元が大きくなると、
漸近過程は成り立たない?
単位超球の中に鋳型が一様分布しているとする
1
  0,lim 1 

NNN
N
xxdT
鋳型の数Nが∞になれば、
d(x, x1NN)は0になりそう
(漸近過程が成り立ちそう)
次元の呪い
次元が大きくなると、
漸近過程は成り立たない?
厚さεの殻の部分にどのくらい鋳型が存在するのか?
 鋳型の数は、殻の部分の体積に依存する(鋳型が一様分布なら当
然だよね!)
11
1-ε
次元の呪い
次元が大きくなると、
漸近過程は成り立たない?
厚さεの殻の部分にどのくらい鋳型が存在するのか?
 鋳型の数は、殻の部分の体積に依存する(鋳型が一様分布なら当
然だよね!)
11
1-ε
殻の部分の体積比
d
d
dd
V
VV
)1(1
)1(
)1()1(




次元の呪い
次元が大きくなると、
漸近過程は成り立たない?
厚さεの殻の部分にどのくらい鋳型が存在するのか?
 鋳型の数は、殻の部分の体積に依存する(鋳型が一様分布なら当
然だよね!)
11
1-ε
殻の部分の体積比
d
d
dd
V
VV
)1(1
)1(
)1()1(




単位超球内の鋳型の内、
殻部分に存在する比率
次元の呪い
次元が大きくなると、
漸近過程は成り立たない?
殻の厚さε=0.1として、殻部分の鋳型の部分を計算して
みる
11
0.9
d = 2(2次元)だと?
1-(1 - 0.1)2 = 0.19
単位超球内の鋳型の19%が殻の中にある
次元の呪い
次元が大きくなると、
漸近過程は成り立たない?
殻の厚さε=0.1として、殻部分の鋳型の部分を計算して
みる
11
0.9
d = 5(5次元)だと?
1-(1 - 0.1)5 = 0.41
単位超球内の鋳型の41%が殻の中にある
次元の呪い
次元が大きくなると、
漸近過程は成り立たない?
殻の厚さε=0.1として、殻部分の鋳型の部分を計算して
みる
11
0.9
d = 10(10次元)だと?
1-(1 - 0.1)10 = 0.65
単位超球内の鋳型の65%が殻の中にある
次元の呪い
次元が大きくなると、
漸近過程は成り立たない?
殻の厚さε=0.1として、殻部分の鋳型の部分を計算して
みる
11
0.9
d = 50(50次元)だと?
1-(1 - 0.1)50 = 0.99
単位超球内の鋳型の99%が殻の中にある!
どういうこっちゃ?
次元の呪い
次元が大きくなると、
漸近過程は成り立たない?
11
0.9
なんとなく分かるのは、
d = 50(50次元)だと、単位超球内の鋳型
の99%が殻の中にある。
これだと、漸近過程は成り立たない・・・
  0,lim 1 

NNN
N
xxdT
次元の呪い
  0,lim 1 

NNN
N
xxdT
*2**
2
1
NN1NN3NN4NN2   
漸近過程がなりたつと、
ベイズ誤り率の上限と下限が決まる
次元の呪い
  0,lim 1 

NNN
N
xxdT
*2**
2
1
NN1NN3NN4NN2   
漸近過程がなりたつと、
ベイズ誤り率の上限と下限が決まる
次元が大きいと漸近過程が
成り立たない!
ということで、データの
次元は小さい方がいい。
章末問題
なにそれおいしいの?
まあ解答のままになりそうですし・・・
代わりに実行サンプルで
許してください
みんなこっちの方が好きでしょ?
Rでボロノイ図書いてみた
#パッケージのインストール
install.packages("tripack")
library(tripack)
data(iris)
iris.vm = voronoi.mosaic(as.vector(iris$Sepal.Length),
as.vector(iris$Sepal.Width), duplicate="remove")
plot(iris$Sepal.Length, iris$Sepal.Width, pch=16)
plot.voronoi(iris.vm, add=T)
RでNN実行してみた
install.packages("class")
library("class")
data(iris)
#irisデータを学習データとテストデータに分ける
train = rbind(iris[1:25,1:4], iris[51:75,1:4], iris[101:125,1:4])
test = rbind(iris[26:50,1:4], iris[76:100,1:4], iris[126:150,1:4])
c = factor(c(iris[1:25,5], iris[51:75,5], iris[101:125,5]))
levels(c) = c("se", "ve", "vi")
knn1(train, test, c) #学習と予測がセット
実行結果
RでkNN実行してみた
install.packages("class")
library("class")
data(iris)
train = rbind(iris[1:25,1:4], iris[51:75,1:4], iris[101:125,1:4])
test = rbind(iris[26:50,1:4], iris[76:100,1:4], iris[126:150,1:4])
c = factor(c(iris[1:25,5], iris[51:75,5], iris[101:125,5]))
levels(c) = c("se", "ve", "vi")
knn(train, test, c, k = 3, prob=TRUE) #kNNの実行
attributes(.Last.value) #詳細の表示
実行結果
knn.cv関数でクロスバ
リデーションも一緒に
できるようだけど、挙
動が謎だった・・・
ちなみに
Scikit-learn(Python)でもできる。
実行サンプル付けようとしたけど力尽きた。
(すいません)

More Related Content

What's hot

グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門
Kawamoto_Kazuhiko
 
ベイズ統計入門
ベイズ統計入門ベイズ統計入門
ベイズ統計入門
Miyoshi Yuya
 
はじめてのパターン認識 第8章 サポートベクトルマシン
はじめてのパターン認識 第8章 サポートベクトルマシンはじめてのパターン認識 第8章 サポートベクトルマシン
はじめてのパターン認識 第8章 サポートベクトルマシン
Motoya Wakiyama
 
はじめてのパターン認識4章後編
はじめてのパターン認識4章後編はじめてのパターン認識4章後編
はじめてのパターン認識4章後編
Tanaka Hidenori
 

What's hot (20)

はじめてのパターン認識 第6章 後半
はじめてのパターン認識 第6章 後半はじめてのパターン認識 第6章 後半
はじめてのパターン認識 第6章 後半
 
ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定
 
深層学習の数理
深層学習の数理深層学習の数理
深層学習の数理
 
強化学習その2
強化学習その2強化学習その2
強化学習その2
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門
 
PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説
 
ベイズ統計入門
ベイズ統計入門ベイズ統計入門
ベイズ統計入門
 
グラフィカル Lasso を用いた異常検知
グラフィカル Lasso を用いた異常検知グラフィカル Lasso を用いた異常検知
グラフィカル Lasso を用いた異常検知
 
coordinate descent 法について
coordinate descent 法についてcoordinate descent 法について
coordinate descent 法について
 
【論文紹介】How Powerful are Graph Neural Networks?
【論文紹介】How Powerful are Graph Neural Networks?【論文紹介】How Powerful are Graph Neural Networks?
【論文紹介】How Powerful are Graph Neural Networks?
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
 
ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデル
 
はじめてのパターン認識 第8章 サポートベクトルマシン
はじめてのパターン認識 第8章 サポートベクトルマシンはじめてのパターン認識 第8章 サポートベクトルマシン
はじめてのパターン認識 第8章 サポートベクトルマシン
 
はじめてのパターン認識4章後編
はじめてのパターン認識4章後編はじめてのパターン認識4章後編
はじめてのパターン認識4章後編
 
[DL輪読会]Understanding Black-box Predictions via Influence Functions
[DL輪読会]Understanding Black-box Predictions via Influence Functions [DL輪読会]Understanding Black-box Predictions via Influence Functions
[DL輪読会]Understanding Black-box Predictions via Influence Functions
 
PRML輪読#1
PRML輪読#1PRML輪読#1
PRML輪読#1
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
 
PRML第6章「カーネル法」
PRML第6章「カーネル法」PRML第6章「カーネル法」
PRML第6章「カーネル法」
 

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

大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム
Takuya Akiba
 
パターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvqパターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvq
sleipnir002
 
距離まとめられませんでした
距離まとめられませんでした距離まとめられませんでした
距離まとめられませんでした
Haruka Ozaki
 
introductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysisintroductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysis
Tatsuki SHIMIZU
 
130323 slide all
130323 slide all130323 slide all
130323 slide all
ikea0064
 

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

大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム
 
DS Exercise Course 4
DS Exercise Course 4DS Exercise Course 4
DS Exercise Course 4
 
データサイエンス概論第一=2-1 データ間の距離と類似度
データサイエンス概論第一=2-1 データ間の距離と類似度データサイエンス概論第一=2-1 データ間の距離と類似度
データサイエンス概論第一=2-1 データ間の距離と類似度
 
距離とクラスタリング
距離とクラスタリング距離とクラスタリング
距離とクラスタリング
 
KDD2014 勉強会
KDD2014 勉強会KDD2014 勉強会
KDD2014 勉強会
 
OWLで何が言えるか
OWLで何が言えるかOWLで何が言えるか
OWLで何が言えるか
 
最近傍探索と直積量子化(Nearest neighbor search and Product Quantization)
最近傍探索と直積量子化(Nearest neighbor search and Product Quantization)最近傍探索と直積量子化(Nearest neighbor search and Product Quantization)
最近傍探索と直積量子化(Nearest neighbor search and Product Quantization)
 
Arc 010 d
Arc 010 dArc 010 d
Arc 010 d
 
Oshasta em
Oshasta emOshasta em
Oshasta em
 
パターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvqパターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvq
 
距離まとめられませんでした
距離まとめられませんでした距離まとめられませんでした
距離まとめられませんでした
 
introductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysisintroductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysis
 
130323 slide all
130323 slide all130323 slide all
130323 slide all
 

More from Motoya Wakiyama

More from Motoya Wakiyama (7)

Repeat buyer prediction for e commerce, KDD2016
Repeat buyer prediction for e commerce, KDD2016Repeat buyer prediction for e commerce, KDD2016
Repeat buyer prediction for e commerce, KDD2016
 
続分かりやすいパターン認識 4章後半(4.7以降)
続分かりやすいパターン認識 4章後半(4.7以降)続分かりやすいパターン認識 4章後半(4.7以降)
続分かりやすいパターン認識 4章後半(4.7以降)
 
データ解析のための統計モデリング入門9章後半
データ解析のための統計モデリング入門9章後半データ解析のための統計モデリング入門9章後半
データ解析のための統計モデリング入門9章後半
 
データ解析のための統計モデリング入門9章後半
データ解析のための統計モデリング入門9章後半データ解析のための統計モデリング入門9章後半
データ解析のための統計モデリング入門9章後半
 
[Rec sys2013勉強会]using maximum coverage to optimize recommendation systems in ...
[Rec sys2013勉強会]using maximum coverage to optimize recommendation systems in ...[Rec sys2013勉強会]using maximum coverage to optimize recommendation systems in ...
[Rec sys2013勉強会]using maximum coverage to optimize recommendation systems in ...
 
[Rec sys2013勉強会]orthogonal query recommendation
[Rec sys2013勉強会]orthogonal query recommendation[Rec sys2013勉強会]orthogonal query recommendation
[Rec sys2013勉強会]orthogonal query recommendation
 
2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習
 

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