Контур модели KNN в ggplot? - PullRequest
       12

Контур модели KNN в ggplot?

3 голосов
/ 19 января 2011

У меня есть модель KNN, которую я строю, используя функцию contour.Это простой пример того, что я делаю (на основе этого экзамена Пердью ):

library(class)
library(nnet)

TrainC<-read.table("http://miner.chem.purdue.edu/Exam1/TrainC.dat")
names(TrainC)<-c("x1","x2","y")

K=15

p <- as.matrix(TrainC[, -3])
xp <- seq(min(TrainC$x1), max(TrainC$x1), length = 50); np <- length(xp)
yp <- seq(min(TrainC$x2), max(TrainC$x2), length = 50)
tp<-TrainC$y

yhat <- knn(p, p, tp, k = K)

plot(TrainC[, 1], TrainC[, 2], xlab = "x1", ylab = "x2", col=as.numeric(TrainC$y)+1)
pt <- expand.grid(x1 = xp, x2 = yp)
Z <- knn(p, pt, tp, k = K)
zp<-class.ind(Z)[,1] - class.ind(Z)[,2]

contour(xp, yp, matrix(zp, np), add = T, levels = 0, labex = 0)

Мой вопрос: как я могу сделать этот самый сюжет вggplot?В частности, как я могу сделать эквивалент contour?

Ответы [ 2 ]

7 голосов
/ 19 января 2011
d <- transform(melt(matrix(zp, np)), xp=xp[X1], yp=yp[X2])
ggplot(d, aes(xp, yp, z=value)) + 
  geom_contour() + 
  geom_point(aes(x1, x2, colour=y, z=NULL), data=TrainC)
3 голосов
/ 19 января 2011

После вашего кода попробуйте это:

library(ggplot2)

p <- ggplot(TrainC, aes(x1, x2))
p + geom_point(aes(colour = as.numeric(y) + 1))

df <- data.frame(x = rep(xp, np), y = rep(yp, each = np), z = zp)
p <- ggplot(df, aes(x, y, z = z))
p + stat_contour(bins = 1)

Это два отдельных графика.Не уверен, как их объединить, но копание в документации здесь должно помочь вам начать.

...