r - 如何在 R 中用网格绘制非线性决策边界?

标签 r plot

我在 ISLR 中找到了这个特定的图表( Figure 2.13 ) 或 ESL做得太好了。我无法猜测作者是如何在 R 中做到这一点的。我知道如何非常轻松地获得橙色和蓝色的点。主要的混淆是背景点和紫色线。

有什么想法吗? Fig 2.13, ISLR

这里是一些示例代码,用于获取带有灰色网格的黄色和橙色点。如何得到一条紫色的任意非线性曲线,然后根据曲线给网格上色?

set.seed(pi)
points = replicate(100, runif(2))
pointsColored = ifelse(apply(points, 2, sum) <= 1, "orange", "blue")
# Confound some
pointsColored[sample.int(length(pointsColored), 10)] = "orange"
plot(x=points[1, ], y=points[2, ])
grid(nx=100, ny=100)
# Plot points over the grid.
points(x=points[1, ], y=points[2, ], col=pointsColored)

最佳答案

正如我在评论中指出的那样,@chl here 提供了解决方案在 stats.stackexchange.com 上。在这里,应用于您的数据集。

library(class)
set.seed(pi)
X <- t(replicate(1000, runif(2)))
g <- ifelse(apply(X, 1, sum) <= 1, 0, 1)
xnew <- cbind(rep(seq(0, 1, length.out=50), 50),
              rep(seq(0, 1, length.out=50), each=50))
m <- knn(X, xnew, g, k=15, prob=TRUE)
prob <- attr(m, "prob")
prob <- ifelse(m=="1", prob, 1-prob)
prob15 <- matrix(prob, 50)
par(mar=rep(3, 4))
contour(unique(xnew[, 1]), unique(xnew[, 2]), prob15, levels=0.5, 
        labels="", xlab='', ylab='', axes=FALSE, lwd=2.5, asp=1)
title(xlab=expression(italic('X')[1]), ylab=expression(italic('X')[2]), 
      line=1, family='serif', cex.lab=1.5)
points(X, bg=ifelse(g==1, "#CA002070", "#0571B070"), pch=21)
gd <- expand.grid(x=unique(xnew[, 1]), y=unique(xnew[, 2]))
points(gd, pch=20, cex=0.4, col=ifelse(prob15 > 0.5, "#CA0020", "#0571B0"))
box()

decision boundary

(更新:我更改了调色板,因为蓝色/黄色/紫色的东西非常丑陋。)

关于r - 如何在 R 中用网格绘制非线性决策边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24052643/

相关文章:

r - 有条件地创建单个变量

r - 绘图轴不在原点相交

r - 绘制太多点?

r - 以 Shiny 的方式处理多个输入

r - dplyr 中分组的众多变量之间的相关性

r - 如何将 nlsList 中的系数获取到数据框中?

r - 如何绘制两个ggplot密度分布之间的差异?

r - R中Barplot中的X轴

python - Matplotlib 中 3-D 散点图中的 z 轴缩放和限制

r - 如何用丝带和线条组合和修改ggplot2图例?