Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

44,046 views

Published on

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

  1. 1. 第5章 k最近傍法(kNN法) 2013/9/3 @「はじめてのパターン認識」読書会
  2. 2. twitterID:wwacky 8月1日から新しい職場で働いてます 最近コードを書いてない・・・ 1週間後の博士論文の審査で使う発表資料がほぼ白紙で 死にそう  やばすぎて艦これ断ちするレベル 自己紹介
  3. 3. 説明のために一部順序を 少し入れ替えています あと、図表ははじめてのパターン認識からの引用です おことわり
  4. 4. 最近傍法って何だ
  5. 5. 最近傍法って何? 簡単に言うと 「近いデータに合わせる」 判別対象のデータが、どの 鋳型(いわゆる学習データ) に一番近いかで判別する コインのサイズ コインの重量 一番近い鋳型が真、 だからこれも真 真 偽
  6. 6. どうやって近さを求めるの? 一般的には 「ユークリッド距離」を使う あるデータxと、クラスiのj番目の データxj (i)のユークリッド距離 d(x,xj (i)) = |x-xj (i)|  原理的には他の距離でもいい けど、ユークリッド距離を使 うのが一般的らしい コインのサイズ コインの重量 真 偽 この距離
  7. 7. 最近傍法の識別規則は?          other txxd reject xxd i j i j i の時  識別クラス )()( ,min,minarg コインのサイズ コインの重量 真 偽 距離が一番小さいデータ が属するクラス 一番近い鋳型との 距離がtより大きい 時はreject !
  8. 8. 識別規則はボロノイ図で表せる(要は可視化?) 最近傍法での判別 学習データ1 学習データ2 学習データ3 識別対象データA
  9. 9. 識別規則はボロノイ図で表せる(要は可視化?) 最近傍法での判別 データ1のボロノイ 領域(支配領域) データ3のボロノイ 領域(支配領域) データ2のボロノイ 領域(支配領域) データ1のボロノイ領域内 ↓ データ1のクラスと識別
  10. 10. 最近傍法での判別 ボロノイ境界 ボロノイ境界 各学習データから等距離の点の集合
  11. 11. 最近傍法での判別 ボロノイ境界    3,...,1  NxxS N    ボロノイ境界 学習データxiとxjのボロノイ境界B(xi, xj) B(xi, xj) = {x|d(xi, x) = d(xj, x)} ⇒xiとxiから等距離のxの集合 1と3の境界だと この辺も境界…?
  12. 12. 最近傍法での判別 データ1と データ3の 超平面 ボロノイ境界(を作る超平面) ベクトルを使って表現するとこうなる 上式を満たすxが表す超平面がボロノイ領域を作る      jiji T xxnxxxnxx       ,2/,0 n x
  13. 13. 最近傍法での判別      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) 超平面
  14. 14. 最近傍法での判別 3次元で表すと超平面はこんな感じみたい
  15. 15. 最近傍法での判別 超平面だとボロノイ 境界にするには ここいらなくね?
  16. 16. データ1とデータ2から 作ったデータ1の半空間 データ1とデータ3から 作ったデータ1の半空間
  17. 17. データ1とデータ2から 作ったデータ1の半空間 データ1とデータ3から 作ったデータ1の半空間 重複箇所がボロノイ領域     ijSx jii j xxDSxVR   , ,, ただし、上式は 開集合だから境 界は含まないら しい。 境界を含める閉 包の場合は以下 で表現  SxVR i ,
  18. 18. ボロノイ図またの名をボロノイモザイク さっきの閉包を全部くっつけたのがボロノイ図    jiSxx ji ji SxVRSxVRSV   ,, ),(),(   これは境界を表す
  19. 19. 当然だけど、学習データを増やすと識別性能は上昇する  当然、ケースバイケースになるだろうけど・・・ データの数と識別性能
  20. 20. kNN法って何だ?
  21. 21. kNN法(k最近傍法)って何? 大ざっぱに言うと、 近傍k個のデータから識別する 2クラス識別の例で考える 右図は、ユークリッド距離で マッピングしたものと思ってくれ クラス1鋳型 クラス2鋳型
  22. 22. kNN法(k最近傍法)って何? 大ざっぱに言うと、 近傍k個のデータから識別する 2クラス識別の例で考える クラス1鋳型 クラス2鋳型 識別対象データ
  23. 23. kNN法(k最近傍法)って何? 大ざっぱに言うと、 近傍k個のデータから識別する k=3とすると… 近傍3個の鋳型のクラスを確認 クラス1鋳型⇒2個 クラス2鋳型⇒1個 クラス1と識別 クラス1鋳型 クラス2鋳型 k=3
  24. 24. kNN法(k最近傍法)って何? 大ざっぱに言うと、 近傍k個のデータから識別する k=4とすると… 近傍4個の鋳型のクラスを確認 クラス1鋳型⇒2個 クラス2鋳型⇒2個 識別をリジェクト クラス1鋳型 クラス2鋳型 k=4 ランダムでクラス1、クラス2を決めてもいいらしい
  25. 25. kNN法(k最近傍法)って何? 大ざっぱに言うと、 近傍k個のデータから識別する k=8とすると… 近傍8個の鋳型のクラスを確認 クラス1鋳型⇒3個 クラス2鋳型⇒5個 クラス2と識別 クラス1鋳型 クラス2鋳型 k=8
  26. 26. kNN法の識別規則 に属する鋳型の数個の鋳型の内、クラス近傍 識別クラス ikk kkkk kkk reject j i Kji Kj : },...,max{},...,{ },...,max{}{ where where 1 1      
  27. 27. kNN法の識別規則 近傍k個の鋳型の内、数が最も多いクラスjと識別する に属する鋳型の数個の鋳型の内、クラス近傍 識別クラス ikk kkkk kkk reject j i Kji Kj : },...,max{},...,{ },...,max{}{ where where 1 1      
  28. 28. kNN法の識別規則 近傍k個の鋳型の内、数が最も多いクラスが複数存在する 場合はrejectする に属する鋳型の数個の鋳型の内、クラス近傍 識別クラス ikk kkkk kkk reject j i Kji Kj : },...,max{},...,{ },...,max{}{ where where 1 1      
  29. 29. 何でk個の鋳型を使うの? 最近傍法だと、他クラスの中に別クラスの鋳型が紛れてい ると、孤立した識別境界ができる ⇒過学習するから汎化性能が低いってこと? 最近傍法(ボロノイ境界)
  30. 30. 何でk個の鋳型を使うの? kNN法だと複数の鋳型の情報を使用するので、誤りを許容 した識別境界になる(孤立する識別境界が減る) 最近傍法(ボロノイ境界) kNN法(識別境界。k=11)
  31. 31. 最適なkはいくつ? 汎化誤差が最少となるkを求めればいい CrossValidationなどを使ってk毎の汎化誤差を求める  汎化誤差の計測は2.2節を参照  本の例だとホールドアウト法と、一つ抜き法を使っている  kが増えた時のホールドアウト法の誤り率が高いのは、次元の呪いの せいらしい こういう時にkを大きく し過ぎると、▲のクラス と識別してしまうから?
  32. 32. kNN法の弱点 処理が重い  鋳型(学習データ)を全探索するから当たり前  手法の改善  誤り削除型kNN  圧縮型kNN  分枝限定法  近似最近傍探索 次元の呪いの影響を受ける  ベイズ誤り率から分かるみたい
  33. 33. kNN法の改善手法
  34. 34. 誤り削除型kNN法(Edited kNN) kNNで識別境界を作成した時に、不正解の識別領域に含 まれる鋳型を削除する  削除すると識別境界が変わるので、再帰的に削除を行ったりする こういうのを消す
  35. 35. 圧縮型kNN(Condensed kNN) 識別に関係ない鋳型を削除する  削除前と後で、誤り率が同じになるように選ぶ こういうのを消す
  36. 36. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う
  37. 37. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う 分枝法
  38. 38. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う 分枝法 クラスタリングで学習データ を組織化する。 階層クラスタリングを使うみた いだが、非階層クラスタリング でも効率化できるのかは不明 S1 S4 S2 S3 S6 S7S5
  39. 39. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う 分枝法 クラスタリングで学習データ を組織化する。 階層クラスタリングを使うみた いだが、非階層クラスタリング でも効率化できるのかは不明 S1 S4 S5 S2 S3 S6 S7 クラスタの平均ベクトルmiと、 平均ベクトルから最遠のデー タとの距離diを算出 m4 m1 d5 m5 m3 d3 d4
  40. 40. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う 限定法 こいつの 近傍を探索
  41. 41. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う 限定法 一番上の階層のクラスタの平 均ベクトルmi との距離を算出 し、最も近いクラスタを探す 対象データとm1、m2、m3との 距離を算出すると、m1が最も 近い(S1が最も近い) S1 S2 S3 m1 m3 m2
  42. 42. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う 限定法 S1の中のクラスタの平均ベク トルmi との距離を算出し、最 も近いクラスタを探す 対象データとm4、m5との距離 を算出すると、 m4が最も近 い(S4が最も近い) S1 S2 S3 S4 m4 S5 m5
  43. 43. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う 限定法 S4の中の学習データから最も 近いデータを探す。 S4の中のだとx38が一番近い。S1 S2 S3 S4 S4の中で最も近い。 x38のとする。 S5
  44. 44. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う 限定法 S4の中の学習データから最も 近いデータを探す。 S4の中のだとx38が一番近い。 S4以外のクラスタのデータが もっと近かったりしないの か? S1 S2 S3 S4 こっちのデータは? x38 S5
  45. 45. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う 限定法 S4以外のクラスタのデータが、 x38より近くないか判断する。 まずはS5のデータで判断。 d(x,m5) > d(x, x38) + d5 なら、 S5の全データはx38より遠い ↓ S5を探索する必要はない 探索するデータが減らせる! S1 S2 S3 S4 x38 S5d5
  46. 46. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う 限定法 S4以外のクラスタのデータが、 x38より近くないか判断する。 まずはS5のデータで判断。 d(x,m5) > d(x, x38) + d5 なら、 S5の全データはx38より遠い S1 S2 S3 S4 x38 S5d5 一旦位置関係は忘れて、S5のデータが取り得 る範囲を考える。
  47. 47. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う 限定法 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のデータが 取り得る範囲
  48. 48. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う 限定法 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のデータが 取り得る範囲
  49. 49. 分枝限定法 分枝法と限定法を用いて、近傍の探索を効率化させる  分枝法:クラスタリングによって木構造のように組織化する  限定法:分枝法で作成した木構造をもとに近傍の探索を行う 限定法 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
  50. 50. 近似最近傍探索 これまでの最近傍探索と考えが若干異なり、 最近傍より少し距離が遠くても許容する
  51. 51. 近似最近傍探索 これまでの最近傍探索と考えが若干異なり、 最近傍より少し距離が遠くても許容する おおざっぱに言うと、 本当はこれが最 近傍だけど、 xA xC xD xE xB q
  52. 52. 近似最近傍探索 これまでの最近傍探索と考えが若干異なり、 最近傍より少し距離が遠くても許容する おおざっぱに言うと、 本当はこれが最 近傍だけど、 こっちで妥協する(近似解) xA xC xD xE xB q
  53. 53. 近似最近傍探索 これまでの最近傍探索と考えが若干異なり、 最近傍より少し距離が遠くても許容する 一応、どこまでも許容するんじゃなくて、最近傍の学習 データより(1+ε)倍の距離にあるデータまで許容する xA xB xC xD xE 数式で表すと、 d(q,x) ≦(1+ε)d(q,x*) q 近似解までの 距離 最近傍までの 距離 d(q,x*) d(q,x)
  54. 54. 近似最近傍探索 これまでの最近傍探索と考えが若干異なり、 最近傍より少し距離が遠くても許容する 一応、どこまでも許容するんじゃなくて、最近傍の学習 データより(1+ε)倍の距離にあるデータまで許容する xA xB xC xD xE 数式で表すと、 d(q,x) ≦(1+ε)d(q,x*) q 近似解までの 距離 最近傍までの 距離 d(q,x*) d(q,x) εは自分で決めるみたい。 クロスバリデーションとかで最適な値を決 めるとか。
  55. 55. 近似最近傍探索 どうやって近似解を探すのか? ⇒「最良優良探索」を行う xA xB xC xD xE q
  56. 56. 近似最近傍探索 最良優良探索 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
  57. 57. 近似最近傍探索 最良優良探索 Step.1:2分木を作成 Step.2:入力データと同じ領域内のデータxDとの距離d(q,xD)を算出 xA xB xC xD xE q A B C D E d(q,xD)
  58. 58. 近似最近傍探索 最良優良探索 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 ),( 
  59. 59. 近似最近傍探索 最良優良探索 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)
  60. 60. 近似最近傍探索 最良優良探索 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よりが 近いから
  61. 61. 近似最近傍探索 最良優良探索 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)
  62. 62. 近似最近傍探索 最良優良探索 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)
  63. 63. 近似最近傍探索 最良優良探索 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 ),(  これが近似解!
  64. 64. 近似最近傍探索 なんで を満たすと、近似解と言えるのか? xA xB xC xD xE q A B C D E ),( 1 ),( Eqd xqd B  
  65. 65. 近似最近傍探索 なんで を満たすと、近似解と言えるのか? (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)
  66. 66. 近似最近傍探索 なんで を満たすと、近似解と言えるのか? (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)
  67. 67. 近似最近傍探索 なんで を満たすと、近似解と言えるのか? (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)
  68. 68. kNN法における次元の呪い
  69. 69. 5.3節に、ベイズ誤り率の話が出てきた のが唐突な感じが・・・
  70. 70. 5.3節に、ベイズ誤り率の話が出てきた のが唐突な感じが・・・ 最後まで読むと、次元の呪いを説明したかったからみたい 漸近過程が成り立つ場合、 鋳型の数Nが無限になると、 ベイズ誤り率の期待値ε*の下限と上限が決まる。 でも、次元が多くなると漸近過程が成り立たない! ⇒誤り率の上限が決まらないのが問題(ってことだと思う)
  71. 71. おことわり 数式の説明は省いて、気になった点のみにしました
  72. 72. 次元の呪い 漸近過程って? 鋳型の数が∞に近づけば、入力xと一致する鋳型が存在し そうなので、何となくこんなもんだと思う   0,lim 1   NNN N xxdT   の距離と、最近傍鋳型 入力 個の鋳型の集合 鋳型の数 NNNN N xxxxd NT N 11 :, : :
  73. 73. 次元の呪い 漸近過程が成り立つと? ベイズ誤り率の期待値ε*が、kNNの誤り率εkNNとの関係と 上限、下限が決まる  証明は5.3.1節を見てください!  資料作るのがめんどくさかった。すいません。質問で対応します。  多クラスの場合も成り立つみたいだけど、証明は確認してない… *2** 2 1 NN1NN3NN4NN2   
  74. 74. 次元の呪い 補足をちょっとだけ これはリジェクト時は誤りとカウントされないから k=偶数の方が、リジェクトが良く生じる という理解だけど、間違ってたらご指摘ください! *2** 2 1 NN1NN3NN4NN2    k=偶数だと誤り率が低く k=奇数だと誤り率が高い
  75. 75. 次元の呪い 次元が大きくなると、 漸近過程は成り立たない? 単位超球の中に鋳型が一様分布しているとする 1
  76. 76. 次元の呪い 次元が大きくなると、 漸近過程は成り立たない? 単位超球の中に鋳型が一様分布しているとする 1   0,lim 1   NNN N xxdT 鋳型の数Nが∞になれば、 d(x, x1NN)は0になりそう (漸近過程が成り立ちそう)
  77. 77. 次元の呪い 次元が大きくなると、 漸近過程は成り立たない? 厚さεの殻の部分にどのくらい鋳型が存在するのか?  鋳型の数は、殻の部分の体積に依存する(鋳型が一様分布なら当 然だよね!) 11 1-ε
  78. 78. 次元の呪い 次元が大きくなると、 漸近過程は成り立たない? 厚さεの殻の部分にどのくらい鋳型が存在するのか?  鋳型の数は、殻の部分の体積に依存する(鋳型が一様分布なら当 然だよね!) 11 1-ε 殻の部分の体積比 d d dd V VV )1(1 )1( )1()1(    
  79. 79. 次元の呪い 次元が大きくなると、 漸近過程は成り立たない? 厚さεの殻の部分にどのくらい鋳型が存在するのか?  鋳型の数は、殻の部分の体積に依存する(鋳型が一様分布なら当 然だよね!) 11 1-ε 殻の部分の体積比 d d dd V VV )1(1 )1( )1()1(     単位超球内の鋳型の内、 殻部分に存在する比率
  80. 80. 次元の呪い 次元が大きくなると、 漸近過程は成り立たない? 殻の厚さε=0.1として、殻部分の鋳型の部分を計算して みる 11 0.9 d = 2(2次元)だと? 1-(1 - 0.1)2 = 0.19 単位超球内の鋳型の19%が殻の中にある
  81. 81. 次元の呪い 次元が大きくなると、 漸近過程は成り立たない? 殻の厚さε=0.1として、殻部分の鋳型の部分を計算して みる 11 0.9 d = 5(5次元)だと? 1-(1 - 0.1)5 = 0.41 単位超球内の鋳型の41%が殻の中にある
  82. 82. 次元の呪い 次元が大きくなると、 漸近過程は成り立たない? 殻の厚さε=0.1として、殻部分の鋳型の部分を計算して みる 11 0.9 d = 10(10次元)だと? 1-(1 - 0.1)10 = 0.65 単位超球内の鋳型の65%が殻の中にある
  83. 83. 次元の呪い 次元が大きくなると、 漸近過程は成り立たない? 殻の厚さε=0.1として、殻部分の鋳型の部分を計算して みる 11 0.9 d = 50(50次元)だと? 1-(1 - 0.1)50 = 0.99 単位超球内の鋳型の99%が殻の中にある!
  84. 84. どういうこっちゃ?
  85. 85. 次元の呪い 次元が大きくなると、 漸近過程は成り立たない? 11 0.9 なんとなく分かるのは、 d = 50(50次元)だと、単位超球内の鋳型 の99%が殻の中にある。 これだと、漸近過程は成り立たない・・・   0,lim 1   NNN N xxdT
  86. 86. 次元の呪い   0,lim 1   NNN N xxdT *2** 2 1 NN1NN3NN4NN2    漸近過程がなりたつと、 ベイズ誤り率の上限と下限が決まる
  87. 87. 次元の呪い   0,lim 1   NNN N xxdT *2** 2 1 NN1NN3NN4NN2    漸近過程がなりたつと、 ベイズ誤り率の上限と下限が決まる 次元が大きいと漸近過程が 成り立たない! ということで、データの 次元は小さい方がいい。
  88. 88. 章末問題 なにそれおいしいの? まあ解答のままになりそうですし・・・
  89. 89. 代わりに実行サンプルで 許してください みんなこっちの方が好きでしょ?
  90. 90. 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)
  91. 91. 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) #学習と予測がセット 実行結果
  92. 92. 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関数でクロスバ リデーションも一緒に できるようだけど、挙 動が謎だった・・・
  93. 93. ちなみに Scikit-learn(Python)でもできる。 実行サンプル付けようとしたけど力尽きた。 (すいません)

×