我有生成的数据,但我不知道如何在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)
答案 0 :(得分:2)
要使用任何其他模型,您只需要适合它并对yhat
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)
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)