R ggplot stat_contour 返回一个我无法解决的错误
R ggplot stat_contour returning an error I can't solve
我正在 EdEx 上学习哈佛 R 课程;我正在学习机器学习模块,涵盖 knn。我使用 mnist_27 训练数据创建了一个 knn 拟合,然后使用预测函数来确定结果是数字 2 还是 7。使用 ggplot,我根据上的像素绘制了预测点 (y)网格(x_1 和 x_2);然后我用 y 给它们上色。我现在要做的是在 p=0.5 边界处使用 stat_contour 放置一个轮廓。但是,我收到此错误:
Computation failed in stat_contour()
: Contour requires single z
at each combination of x
and y
.
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每一行,所以我不确定出了什么问题。如果有人能提供帮助,将不胜感激。
我不太明白为什么,但我认为stat_contour失败的原因是由于对(x_1,x_2)的观察不足,因此p。
我没有使用训练数据集(800 个观测值)中的 (x_1,x_2),而是使用了完整的数据集 (mnist$true_p),它有 22500 个观测值.我重新编码以使用 (mnist$true_p$x_1, mnist$true_p$x_2) 从拟合中得到 p_x。使用相同的代码,stat_contour 然后工作。
k_val <- 1
knn_fit <- knn3(y ~ ., data = mnist_27$train, k = k_val)
x_1 <- mnist_27$true_p$x_1
x_2 <- mnist_27$true_p$x_2
knn_df <- data.frame(x_1, x_2)
y_x <- predict(knn_fit, knn_df, type = "class")
p_hat_knn <- predict(knn_fit, knn_df, type = "prob")
p_x <- p_hat_knn[,2]
knn_df <- data.frame(x_1, x_2, p_x)
p1 <- ggplot() +
geom_point(data=mnist_27$train, aes(x = x_1, y = x_2, colour = factor(y)), shape=21, size=2, stroke=1) +
stat_contour(data=knn_df, aes(x=x_1, y=x_2, z=p_x), breaks=c(0.5), color="black")
plot(p1)
knn_fit <- knn3(y ~ ., data = mnist_27$test, k = k_val)
x_1 <- mnist_27$true_p$x_1
x_2 <- mnist_27$true_p$x_2
knn_df <- data.frame(x_1, x_2)
y_x <- predict(knn_fit, knn_df, type = "class")
p_hat_knn <- predict(knn_fit, knn_df, type = "prob")
p_x <- p_hat_knn[,2]
knn_df <- data.frame(x_1, x_2, p_x)
p2 <- ggplot() +
geom_point(data=mnist_27$test, aes(x = x_1, y = x_2, colour = factor(y)), shape=21, size=2, stroke=1) +
stat_contour(data=knn_df, aes(x=x_1, y=x_2, z=p_x), breaks=c(0.5), color="black")
plot(p2)
grid.arrange(p1, p2, nrow=1)
代码现在生成了我需要的东西。
如果有人有任何进一步的建议,请告诉我。谢谢
我正在 EdEx 上学习哈佛 R 课程;我正在学习机器学习模块,涵盖 knn。我使用 mnist_27 训练数据创建了一个 knn 拟合,然后使用预测函数来确定结果是数字 2 还是 7。使用 ggplot,我根据上的像素绘制了预测点 (y)网格(x_1 和 x_2);然后我用 y 给它们上色。我现在要做的是在 p=0.5 边界处使用 stat_contour 放置一个轮廓。但是,我收到此错误:
Computation failed in
stat_contour()
: Contour requires singlez
at each combination ofx
andy
.
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每一行,所以我不确定出了什么问题。如果有人能提供帮助,将不胜感激。
我不太明白为什么,但我认为stat_contour失败的原因是由于对(x_1,x_2)的观察不足,因此p。
我没有使用训练数据集(800 个观测值)中的 (x_1,x_2),而是使用了完整的数据集 (mnist$true_p),它有 22500 个观测值.我重新编码以使用 (mnist$true_p$x_1, mnist$true_p$x_2) 从拟合中得到 p_x。使用相同的代码,stat_contour 然后工作。
k_val <- 1
knn_fit <- knn3(y ~ ., data = mnist_27$train, k = k_val)
x_1 <- mnist_27$true_p$x_1
x_2 <- mnist_27$true_p$x_2
knn_df <- data.frame(x_1, x_2)
y_x <- predict(knn_fit, knn_df, type = "class")
p_hat_knn <- predict(knn_fit, knn_df, type = "prob")
p_x <- p_hat_knn[,2]
knn_df <- data.frame(x_1, x_2, p_x)
p1 <- ggplot() +
geom_point(data=mnist_27$train, aes(x = x_1, y = x_2, colour = factor(y)), shape=21, size=2, stroke=1) +
stat_contour(data=knn_df, aes(x=x_1, y=x_2, z=p_x), breaks=c(0.5), color="black")
plot(p1)
knn_fit <- knn3(y ~ ., data = mnist_27$test, k = k_val)
x_1 <- mnist_27$true_p$x_1
x_2 <- mnist_27$true_p$x_2
knn_df <- data.frame(x_1, x_2)
y_x <- predict(knn_fit, knn_df, type = "class")
p_hat_knn <- predict(knn_fit, knn_df, type = "prob")
p_x <- p_hat_knn[,2]
knn_df <- data.frame(x_1, x_2, p_x)
p2 <- ggplot() +
geom_point(data=mnist_27$test, aes(x = x_1, y = x_2, colour = factor(y)), shape=21, size=2, stroke=1) +
stat_contour(data=knn_df, aes(x=x_1, y=x_2, z=p_x), breaks=c(0.5), color="black")
plot(p2)
grid.arrange(p1, p2, nrow=1)
代码现在生成了我需要的东西。
如果有人有任何进一步的建议,请告诉我。谢谢