绘制决策边界

时间:2014-02-03 04:15:05

标签: r plot contour boundary

我有生成的数据,但我不知道如何在R中为这些数据绘制决策边界。

使用以下代码生成数据:

n=2000
p=2
sigma <- 1 
meanpos <- 2 
meanneg <- 3 
npos <- round(n/20) 
nneg <- round((n-2*npos)) 

xpos1 <- matrix(rnorm(npos*p,mean=4.5,sd=sigma),npos,p)
xpos1[,1]=xpos1[,1]-1
xpos1[,2]=xpos1[,2]+1


xpos2 <- matrix(rnorm(npos*p,mean=6,sd=sigma),npos,p)
xpos2[,1]=xpos2[,1]+6
xpos2[,2]=xpos2[,2]-8

xneg2 <- matrix(rnorm(nneg*p,mean=3,sd=sigma),nneg,p)
xneg2[,1]=xneg2[,1]+3
xneg2[,2]=xneg2[,2]-3

x <- rbind(xpos1,xpos2,xneg2)

y <- matrix(c(rep(-1,2*npos),rep(1,nneg)))

plot(x,xlab="x1",ylim=c(-4,11),ylab="x2",col=ifelse(y<0,"red3","black"))

有人可以帮我吗?

编辑:我发现一些R代码可能有帮助,但决定边界是使用Knn的情节,我想使用其他学习算法,如glmnet,我怎么能用这种数据呢?感谢

GS <- 75 # put data in a Gs x Gs grid
XLIM <- range(x[,1])
tmpx <- seq(XLIM[1], XLIM[2], len=GS)    
YLIM <- range(x[,2])
tmpy <- seq(YLIM[1], YLIM[2], len=GS)
newx <- expand.grid(tmpx, tmpy)   
yhat <- knn(x, newx, y, k=1)

plot(x, xlab="X1", ylab="X2", xlim=XLIM, ylim=YLIM, type="n")

contour(tmpx, tmpy, matrix(as.numeric(yhat),GS,GS), levels=c(1,2), add=TRUE, drawlabels=FALSE)

1 个答案:

答案 0 :(得分:2)

要使用任何其他模型,您只需要适合它并对yhat

进行不同的预测

glmnet:

library(glmnet)
mod <- glmnet(x, y, family = "binomial")

yhat <- predict(mod, as.matrix(newx), type = "class", s = 0.001)

plot(x, xlab="X1", ylab="X2", xlim=XLIM, ylim=YLIM)

contour(tmpx, tmpy, matrix(as.numeric(yhat),GS,GS), levels=c(1,2), add=TRUE, drawlabels=FALSE)

enter image description here

随机森林:

library(randomForest)

newx <- as.matrix(newx)
colnames(newx) <- NULL
mod <- randomForest(x, factor(y))
yhat <- predict(mod, as.matrix(newx))

plot(x, xlab="X1", ylab="X2", xlim=XLIM, ylim=YLIM)

contour(tmpx, tmpy, matrix(as.numeric(yhat),GS,GS), levels=c(1,2), add=TRUE, drawlabels=FALSE)

enter image description here