2016-11-28 4 views
3

私のデータを分類するためにboundary-decision関数を探したいと思います。ここにそれらの例があります。knn-classifierを使用した境界決定

"Distance","Dihedral","Categ" 
    4.083,82.267,C 
    4.132,87.073,C 
    4.713,-80.999,C 
    3.427,-48.144,NC 
    3.663,96.994,C 
    3.99,71.919,C 
    3.484,78.684,C 

これまでのところ、私はknnモデルを持っていましたが、私は非線形決定境界をプロットしたいと思います。私が検索した例では、いくつかの変数があります。これらの変数は、どこで使用するのか、それとも何を意味するのかという手掛かりはありません。私は「統計学習の要素」の中で見つけたこの例について話しています。

library(ElemStatLearn) 
require(class) 
x <- mixture.example$x 
g <- mixture.example$y 
xnew <- mixture.example$xnew 
mod15 <- knn(x, xnew, g, k=15, prob=TRUE) 
prob <- attr(mod15, "prob") 
prob <- ifelse(mod15=="1", prob, 1-prob) 
px1 <- mixture.example$px1 
px2 <- mixture.example$px2 
prob15 <- matrix(prob, length(px1), length(px2)) 
par(mar=rep(2,4)) 
contour(px1, px2, prob15, levels=0.5, labels="", xlab="", ylab="", main= 
     "15-nearest neighbour", axes=FALSE) 
points(x, col=ifelse(g==1, "coral", "cornflowerblue")) 
gd <- expand.grid(x=px1, y=px2) 
points(gd, pch=".", cex=1.2, col=ifelse(prob15>0.5, "coral", "cornflowerblue")) 
box() 

正確にpx1とpx2とは何ですか?私の特定のケースでも同様の変数が必要ですか?

ありがとうございました!

+0

IはPX1及びPX2は、単に新しいデータは、新しいデータがx及びy軸に沿って、すなわち点に対してグリッドを記述するベクトルであると思います。 – Andrie

答えて

1

私は、何が起こるかを明確にするために、この例を書き直して注釈を付けました。

この例では、テストセット全体を変換する単純な拡張グリッドであるテストセットを構築しています。したがって、px1はテストデータのグリッドのx成分を記述するベクトルであり、px2はyと同じですが、次にxnewexpand.grid()の結果です。

次のコードを試してください。私はk値を修正し、あなたが選んだ間隔でxnewを構築する簡単な方法を提供しました。

library(ElemStatLearn) 
require(class) 

# Use the training data from mixture.example 
x <- mixture.example$x 
g <- mixture.example$y 

# Construct a test grid using the extent of the training data 
xx_range <- round(range(x[, 1]), 1) 
xy_range <- round(range(x[, 2]), 1) 

nnn <- 0.1 
px1 <- seq(xx_range[1], xx_range[2], by = nnn) # vector with x extent 
px2 <- seq(xy_range[1], xy_range[2], by = nnn) # vector with y extent 
xnew <- as.matrix(expand.grid(px1, px2))  # matrix of new values 

# Train a model 
k <- 10 
mod15 <- knn(x, xnew, g, k=k, prob=TRUE) 
prob <- attr(mod15, "prob") 
prob <- ifelse(mod15=="1", prob, 1-prob) 
prob15 <- matrix(prob, length(px1), length(px2)) 

# Plot the results 
par(mar=rep(2,4)) 
contour(px1, px2, prob15, levels=0.5, labels="", xlab="", ylab="", main= 
      sprintf("%d-nearest neighbour", k), axes=FALSE) 
points(x, col=ifelse(g==1, "coral", "cornflowerblue")) 
points(xnew, pch=".", cex=1.2, col=ifelse(prob15>0.5, "coral", "cornflowerblue")) 
box() 

enter image description here

関連する問題