如何在 R 中定位使用 kNN 错误分类的单个样本?
Posted
技术标签:
【中文标题】如何在 R 中定位使用 kNN 错误分类的单个样本?【英文标题】:How to locate individual samples that have been misclassified using kNN, in R? 【发布时间】:2021-02-05 02:58:15 【问题描述】:使用 R 中的 Iris 数据集,我正在使用 kNN 进行分类。我有兴趣找到使用测试集错误分类的观察结果。我能够生成散点图,可以直观地看到被错误分类的观察结果。但是,我怎样才能找到并列出所有被错误分类的观察结果。我已经包含了我用来获取下面散点图的代码,它来自https://rpubs.com/Tonnia/irisknn
set.seed(12345)
allrows <- 1:nrow(iris)
trainrows <- sample(allrows, replace = F, size = 0.8*length(allrows))
train_iris <- iris[trainrows, 1:4]
train_label <- iris[trainrows, 5]
table(train_label)
test_iris <- iris[-trainrows, 1:4]
test_label <- iris[-trainrows, 5]
table(test_label)
library(class)
error.train <- replicate(0,30)
for(k in 1:30)
pred_iris <- knn(train = train_iris, test = train_iris, cl = train_label, k)
error.train[k]<-1-mean(pred_iris==train_label)
error.train <- unlist(error.train, use.names=FALSE)
error.test <- replicate(0,30)
for(k in 1:30)
pred_iris <- knn(train = train_iris, test = test_iris, cl = train_label, k)
error.test[k]<-1-mean(pred_iris==test_label)
error.test <- unlist(error.test, use.names = FALSE)
plot(error.train, type="o", ylim=c(0,0.15), col="blue", xlab = "K values", ylab = "Misclassification errors")
lines(error.test, type = "o", col="red")
legend("topright", legend=c("Training error","Test error"), col = c("blue","red"), lty=1:1)
pred_iris<-knn(train = train_iris, test = test_iris, cl = train_label, 6)
result <- cbind(test_iris, pred_iris)
combinetest <- cbind(test_iris, test_label)
result%>%
ggplot(aes(x=Petal.Width, y=Petal.Length, color=pred_iris))+
geom_point(size=3)
combinetest%>%
ggplot(aes(x=Petal.Width, y=Petal.Length, color=test_label))+
geom_point(size=3)
【问题讨论】:
【参考方案1】:在您的代码中,pred_iris
保存当前训练模型响应的值。
获得combinetest
数据后,在代码末尾附近,您可以执行以下操作:
combinetest[test_label != pred_iris,]
获取预测与标签不同的那些。
或者,使用更简洁易读的语法:
library(tidyverse)
combinetest %>%
filter(test_label != pred_iris)
【讨论】:
以上是关于如何在 R 中定位使用 kNN 错误分类的单个样本?的主要内容,如果未能解决你的问题,请参考以下文章