Я не очень понимаю, почему, но я думаю, что причина, почему stat_contour потерпел неудачу, была из-за недостаточного количества наблюдений для (x_1, x_2), и поэтому
Вместо использования (x_1, x_2) из набора данных поезда (800 наблюдений) я использовал полный набор (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)
Код теперь производит то, что мне нужно.
Если у кого-либо есть какие-либо дополнительные предложения, пожалуйста, дайте мне знать.Благодаря.