KNN法(K最近傍法)でクラス分類
超お手軽分類手法!!KNN法をRで実装してみた
KNN法はデータ数が多量であれば、それなりの性能があるとされています。
実装方法は超簡単
- 入力データと全学習データとのユークリッド距離を計算。
- 距離が短いものから順にk個だけ学習データから取り出す。
- 取り出した集合で入力データのクラスを多数決で決める。
つーことでRでの実装
# KNN法 # x:入力データ, data:学習データ # t:学習データのクラスラベルのベクトル(1以上の正の整数) myKNN <- function(x,data,t,k){ classNum <- max(t) #クラス数 dataN <- length(t) #学習データ数 calcDistance <- function(d){ #ベクトル間のユークリッド距離計算 return ( sum( (d-x)^2 ) ) # sqrtなし } distances <- apply(data,1,calcDistance) # 全学習データとの距離計算 rank <- trunc(rank(distances)) # 昇順ランキングベクトル(trunc()で小数点以下切捨て) clsCount <- function(cls){ # 上位k番内のクラスclsの数を数える return ( sum((t)[seq(dataN)[rank<=k]] == cls) ) } count.v <- mapply( clsCount, seq(classNum) ) count.r <- rank(count.v) # 昇順にランキング result <- order(count.r) # 昇順にソート後、ソート前の位置 return ( result[length(result)] )# カウントが最も多いクラスを返す }
短すぎて吹いたw
とりあえずプロットしてみる。(testData0.csv)
なんかギザギザしてる・・・
まぁ、仕方ないのかな。
多クラスで試してみる。(testData3.csv)
まぁ、いいかんじ?
K=3でも試してみる。
なんか灰色の領域が飛び出しとるww
あきらかにダメだろこれはww
KNN法の感想
学習時間が0
実装楽勝www
識別速度超OSEEEEEEEEEEEEEEEEEEEEE!!!!!!!!
プロット図作るのに100秒前後かかるし!!
他の方法だともっと早かったorz
交差確認法とかできちんと分類性能評価しないとなぁ・・・
つかもうネタが尽きてきはじめた。('A`)
そろそろPRMLの話に行こうかなぁ(´ー`)
- 作者: C. M.ビショップ,元田浩,栗田多喜夫,樋口知之,松本裕治,村田昇
- 出版社/メーカー: シュプリンガー・ジャパン株式会社
- 発売日: 2007/12/10
- メディア: 単行本
- 購入: 18人 クリック: 1,588回
- この商品を含むブログ (111件) を見る