Rで学ぶデータサイエンス
   5パターン認識
    第8章 k-近傍法
 第9章 学習ベクトル量子化
      2011/07/**
  TwitterID:sleipnir002
R一人勉強会のご紹介
                       Rで学ぶデータサイエンス 5パターン認識
                       (著)金森 敬文, 竹之内 高志, 村田 昇, 金 明哲
                       共立出版
                       今ならデモスクリプトがダウンロードできる!
                       http://www.kyoritsu-
                       pub.co.jp/service/service.html#019256


第1章 判別能力の評価 Done
第2章 k-平均法 Done
第3章 階層的クラスタリング
第4章 混合正規分布モデル Done
第5章 判別分析                               おもしろネタ募集中
第6章 ロジスティック回帰
第7章 密度推定
第8章 k-近傍法 ←イマココ!
第9章 学習ベクトル量子化 ←イマココ!
第10章 決定木
第11章 サポートベクターマシン
第12章 正則化とパス追跡アルゴリズム
第13章 ミニマックス確率マシン
第14章 集団学習                      さぁ、今すぐAmazonでクリック!!
第15章 2値判別から多値判別へ
前回のあらすじ
• 前回は第3回として混合正規分布とEMアルゴリ
  ズムによるクラスタリングを学んだよ!
• 混合正規分布モデルをEMアルゴリズムを使って
  データから推定、事後確率を使ってクラスタリン
  グすることができる。
第8、9章の目的
      K-近傍法で教師ありクラス分類
    学習ベクトル量子化で教師ありクラス分類

• k-近傍法
• 学習ベクトル量子化
k-近傍法について
k-近傍法のアルゴリズム
   K-近傍法とは近くのデータで多数決を取る方法

                e.g.3-近傍法の場合
• テストデータの近くに
  ある学習データの多
  数決でテストデータ        テストデータ

  のラベルを予測する。
• 多クラス変数でも簡      3近傍のトレーニングデータ



  単に予測できる。
Rでk-近傍法を実装する
Rでk-近傍法を実装するknn

 knn(train, test, cl, k = 1, l = 0, prob = FALSE, use.all = TRUE)


• Classパッケージ
• 因子型ベクトルを返す。
Vehicleデータセット
• mlbenchパッケージ
• 画像のシルエットから車種を予測する。
• 4つの車種の写真から形状特徴を抽出し、18次元の
  ベクトルに変換したもの
• n=846,m=18,クラス数=4
• 今回は1:200までをテストデータ、残りを学習データと
  する。




 http://archive.ics.uci.edu/ml/datasets/Statlog+%28Vehicle+Silhouettes%29
k-近傍法で予測する
library(class)                               Package class
library(mlbench)
data(Vehicle)
idtest<-seq(1,200)
idtrain<-seq(201,nrow(Vehicle))
xtest<-Vehicle[idtest, 1:18]                 テストデータの作成
ytrue<-Vehicle[idtest, 19]
xtrain<-Vehicle[idtrain, 1:18]               トレーニングデータの作
ytrain<-Vehicle[idtrain, 19]                 成
ypred.knn<-knn(xtrain, xtest, ytrain, k=3)   3-近傍法でで予測する
tab.knn<-table(ypred.knn, ytrue)             クロス集計で結果を評
tab.knn
sum(diag(tab.knn))/length(xtest[, 1])
                                             価する。
結果
学習ベクトル量子化(LVQ)について
LVQによる教師あり
      多クラス判別問題
• 逐次型学習でコードブックベクトル(=モデ
  ル)を学習する。
• SOMの教師あり版、k-平均法とk-近傍法のハ
  イブリッドみたいなもの
 – 学習:コードブックベクトルで空間をボロロイ分割
   (k-平均法)
 – 予測:コードブックベクトルでテストデータのラベ
   ルk-近傍法で予測する。
LVQで判別問題を解く流れ
 入力データとラベル        LVQアルゴリズム         予測結果

               初期コードブックベクトル




                              x,y




初期コードブックベクトル   学習されたコードブックベクトル      テストデータ
LVQアルゴリズム色々
• LVQ1
• LVQ2.1
• LVQ3
LVQ1アルゴリズム(1)
ある時点tでの代表ベクトルm(t)がある。
LVQ1アルゴリズム(2)
 そこに学習データxが入力される
LVQ1アルゴリズム(3)
ⅰ)学習データxのラベルyと、その最短近傍の代表ベクトルmc(t)のラベルが
    等しい場合⇒代表ベクトルmi(t)を学習データxに近づける。

      mc (t  1)  mc (t )   (t )( x(t )  mc (t ))
LVQ1アルゴリズム(4)
ⅰ)学習データxのラベルyと、その最短近傍の代表ベクトルmc(t)のラベルが
   等しくない場合⇒代表ベクトルmc(t)を学習データxから遠ざける。

      mc (t  1)  mc (t )   (t )( x(t )  mc (t ))
LVQ1アルゴリズム(5)
2~5の過程を学習データの数だけ繰り返す。
LVQの注意点
• 逐次型学習なので、初期代表ベクトルに結果
  が依存する。
• 学習データによる学習の順番にも依存する。
RでLVQを実装する
LVQで判別問題を解く
 入力データとラベル              LVQアルゴリズム=学習       予測結果

                    初期コードブックベクトル




                 lvq1
       lvqinit                       x,y       lvqtest




初期コードブックベクトル            学習されたコードブックベクトル    テストデータ
ClassパッケージのLVQ関数
     初期コードブックを生成(k-近傍法でサンプリング)
          lvqinit(x, cl, size, prior, k = 5)
             LVQアルゴリズムでコードブックを生成
lvq1(x, cl, codebk, niter = 100 * nrow(codebk$x), alpha = 0.03)

       コードブックを用いてテスト用にラベルを与える
              lvqtest(codebk, test)

• Classパッケージ
LVQ1で予測する
library(class)                           Package class
library(mlbench)
data(Vehicle)
idtest<-seq(1,200)
idtrain<-seq(201,nrow(Vehicle))
xtest<-Vehicle[idtest, 1:18]
ytrue<-Vehicle[idtest, 19]               テストデータの作成
xtrain<-Vehicle[idtrain, 1:18]
ytrain<-Vehicle[idtrain, 19]             初期コードブックベクト
cdinit<-lvqinit(xtrain, ytrain,10)       ルの生成
cdvec<-lvq1(xtrain, ytrain, cdinit)
ypred.lvq1<-lvqtest(cdvec, xtest)
                                         LVQ1でコードブックベク
tab.lvq1<-table(ypred.lvq1, ytrue)       トルの生成
tab.lvq1
sum(diag(tab.lvq1))/length(xtest[, 1])   クロス集計で結果を評
                                         価する。
結果
まとめ
• k-近傍法という多数決による多クラス判別法
  を勉強したよ。
• 学習ベクトル量子化というk-近傍法とk-平均
  法を混ぜたような学習法を学んだよ。

パターン認識 08 09 k-近傍法 lvq