【发布时间】:2018-12-30 10:12:22
【问题描述】:
我正在学习 EdEx 的哈佛 R 课程;我负责机器学习模块,涵盖 knn。我使用 mnist_27 训练数据创建了一个 knn 拟合,然后使用 predict 函数来确定结果是数字 2 还是 7。使用 ggplot,我根据网格上的像素 (x_1) 绘制了预测点 (y)和 x_2);然后我用y给它们上色。我现在要做的是在 p=0.5 边界处使用 stat_contour 放置轮廓。但是,我收到了这个错误:
stat_contour()中的计算失败:轮廓在x和y的每个组合中都需要一个z。
library(tidyverse)
library(caret)
library(dslabs)
data("mnist_27")
knn_fit <- knn3(y ~ ., data = mnist_27$train, k = 5)
x_1 <- mnist_27$train$x_1
x_2 <- mnist_27$train$x_2
y_x <- predict(knn_fit, mnist_27$train, type = "class")
p_hat_knn <- predict(knn_fit, mnist_27$train, type = "prob")
p_x <- p_hat_knn[,2]
knn_df <- data.frame(x_1, x_2, p_x, y_x)
plot_val <- knn_df %>%
ggplot() +
geom_point(aes(x = x_1, y = x_2, colour = factor(y_x)), shape=21, size=2, stroke=1) +
stat_contour(aes(x = x_1, y = x_2, z=p_x), breaks=c(0.5), color="black")
plot(plot_val)
错误告诉我,我没有每个 (x_1, x_2) 对的轮廓的概率,但我的数据框每行都有一个 p_x,所以我不确定出了什么问题。如果有人可以提供帮助,将不胜感激。
【问题讨论】:
-
无法访问此数据集。它可能存在于
dslabs包中。您能否将其dput添加到问题中? -
嗨@NelsonGon;是的,mnist_27 数据在 dslabs 包中。我按要求使用了 dput 命令;这是指向数据的 Dropbox 链接:dropbox.com/s/rkmvjrtuea1sgfb/mnist27data?dl=0
-
我之所以使用训练数据集生成y(x_1,x_2),是为了将过度训练和平滑不足的效果与测试集进行比较。一旦我得到这个轮廓的东西排序,我会在测试集上重复。谢谢!