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

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

我在这里遇到了一个难题,无法识别三类问题的决策边界。这是我的代码,到目前为止,我没有得到决策边界。

我在这个网站的其他地方看到了使用ggplot回答这类问题的答案。但我想用经典的plot函数来获取答案。

 library("ISLR")trainxx=Auto[,c(1,3)]trainyy=(Auto[,8])n.grid1 <- 50x1.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


回答:

这里有一个调整后的方法,可以绘制决策边界为线。我原本以为这需要每个类的预测概率,但阅读了这个答案后,发现你只需在预测到某个类的地方将其标记为1,其余地方标记为0即可。

# 为每个类创建矩阵,其中p = 1表示任何预测为该类的地方,其他地方为0n_classes = 3class_regions = lapply(1:n_classes, function(class_num) {    indicator = ifelse(mod.opt == class_num, 1, 0)    mat = matrix(indicator, n.grid1, n.grid1)})# 设置颜色class_colors = c("#4E79A7", "#F28E2B", "#E15759")# 添加一些透明度,使填充颜色不太亮fill_colors = paste0(class_colors, "60")# 使用image绘制每个点的预测类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])# 为每个类单独绘制轮廓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)})# 使用pch = 21绘制带边框的点,使其更突出points(trainxx, bg = class_colors[trainyy],        col = "black",       pch = 21)

生成的图表如下:

带有决策边界线的图表

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注