パターン認識 08 09 k-近傍法 lvq
TRANSCRIPT
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章集団学習第15章 2値判別から多値判別へ
さぁ、今すぐAmazonでクリック!!
おもしろネタ募集中
前回のあらすじ
• 前回は第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)
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)
tab.knn<-table(ypred.knn, ytrue)
tab.knn
sum(diag(tab.knn))/length(xtest[, 1])
Package class
テストデータの作成
3-近傍法でで予測する
トレーニングデータの作成
クロス集計で結果を評価する。
結果
学習ベクトル量子化(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に近づける。
))()()(()()1( tmtxttmtm ccc
LVQ1アルゴリズム(4)ⅰ)学習データxのラベルyと、その最短近傍の代表ベクトルmc(t)のラベルが
等しくない場合⇒代表ベクトルmc(t)を学習データxから遠ざける。
))()()(()()1( tmtxttmtm ccc
LVQ1アルゴリズム(5)
2~5の過程を学習データの数だけ繰り返す。
LVQの注意点
• 逐次型学習なので、初期代表ベクトルに結果が依存する。
• 学習データによる学習の順番にも依存する。
RでLVQを実装する
LVQで判別問題を解くLVQアルゴリズム=学習
初期コードブックベクトル
学習されたコードブックベクトル
x,y
テストデータ
予測結果
初期コードブックベクトル
入力データとラベル
lvqinit
lvq1
lvqtest
ClassパッケージのLVQ関数
• Classパッケージ
初期コードブックを生成(k-近傍法でサンプリング)lvqinit(x, cl, size, prior, k = 5)
LVQアルゴリズムでコードブックを生成lvq1(x, cl, codebk, niter = 100 * nrow(codebk$x), alpha = 0.03)
コードブックを用いてテスト用にラベルを与えるlvqtest(codebk, test)
LVQ1で予測する
library(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)
tab.lvq1<-table(ypred.lvq1, ytrue)
tab.lvq1
sum(diag(tab.lvq1))/length(xtest[, 1])
Package class
テストデータの作成
LVQ1でコードブックベクトルの生成
初期コードブックベクトルの生成
クロス集計で結果を評価する。
結果
まとめ
• k-近傍法という多数決による多クラス判別法を勉強したよ。
• 学習ベクトル量子化というk-近傍法とk-平均法を混ぜたような学習法を学んだよ。