gpt4 book ai didi

r - 使用 R 获取 KNN 分类器的决策边界

转载 作者:行者123 更新时间:2023-11-30 08:24:52 26 4
gpt4 key购买 nike

我正在尝试拟合 KNN 模型并使用 R 中 ISLR 包中的自动数据集获取决策边界。

在这里,我很难确定 3 类问题的决策边界。到目前为止,这是我的代码。我没有得到决策边界。

我在这个网站的其他地方看到了使用 ggplot 的此类问题的答案。但我想使用绘图函数以经典方式获得答案。

 library("ISLR")

trainxx=Auto[,c(1,3)]
trainyy=(Auto[,8])

n.grid1 <- 50

x1.grid1 <- seq(f = min(trainxx[, 1]), t = max(trainxx[, 1]), l = n.grid1)
x2.grid1 <- seq(f = min(trainxx[, 2]), t = max(trainxx[, 2]), l = n.grid1)
grid <- expand.grid(x1.grid1, x2.grid1)

library("class")
mod.opt <- knn(trainxx, grid, trainyy, k = 10, prob = T)

prob_knn <- attr(mod.opt, "prob")

我的问题主要是在这个代码段之后。我非常确定我必须修改以下部分。但我不知道怎么办。我需要在这里使用“嵌套if”吗?

prob_knn <- ifelse(mod.opt == "3", prob_knn, 1 - prob_knn) 



prob_knn <- matrix(prob_knn, n.grid1, n.grid1)


plot(trainxx, col = ifelse(trainyy == "3", "green",ifelse(trainyy=="2", "red","blue")))
title(main = "plot of training data with Desicion boundary K=80")
contour(x1.grid1, x2.grid1, prob_knn, levels = 0.5, labels = "", xlab = "", ylab = "",
main = "", add = T , pch=20)

如果有人能够提出解决此问题的建议,这将是一个很大的帮助。

基本上我需要这样的东西来解决三类问题 https://stats.stackexchange.com/questions/21572/how-to-plot-decision-boundary-of-a-k-nearest-neighbor-classifier-from-elements-o

最佳答案

这是一种调整后的方法,将决策边界绘制为线条。我认为这需要每个类别的预测概率,但在阅读 this answer 后事实证明,您可以将每个类别的预测概率标记为 1,无论该类别是预测的还是 0。

# Create matrices for each class where p = 1 for any point
# where that class was predicted, 0 otherwise
n_classes = 3
class_regions = lapply(1:n_classes, function(class_num) {
indicator = ifelse(mod.opt == class_num, 1, 0)
mat = matrix(indicator, n.grid1, n.grid1)
})

# Set up colours
class_colors = c("#4E79A7", "#F28E2B", "#E15759")
# Add some transparency to make the fill colours less bright
fill_colors = paste0(class_colors, "60")

# Use image to plot the predicted class at each point
classes = matrix(as.numeric(mod.opt), n.grid1, n.grid1)
image(x1.grid1, x2.grid1, classes, col = fill_colors,
main = "plot of training data with decision boundary",
xlab = colnames(trainxx)[1], ylab = colnames(trainxx)[2])
# Draw contours separately for each class
lapply(1:n_classes, function(class_num) {
contour(x1.grid1, x2.grid1, class_regions[[class_num]],
col = class_colors[class_num],
nlevels = TRUE, add = TRUE, lwd = 2, drawlabels = FALSE)
})
# Using pch = 21 for bordered points that stand out a bit better
points(trainxx, bg = class_colors[trainyy],
col = "black",
pch = 21)

结果图:

Plot with lines for decision boundaries

关于r - 使用 R 获取 KNN 分类器的决策边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55084815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com