问题描述
使用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,test = test_iris,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,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,color=test_label))+
geom_point(size=3)
解决方法
在您的代码中,pred_iris
保留了当前已训练模型响应的值。
一旦有了combinetest
数据,在代码末尾,您可以执行以下操作:
combinetest[test_label != pred_iris,]
要获得预测结果与标签不同的预测结果。
或者,使用更简洁的语法:
library(tidyverse)
combinetest %>%
filter(test_label != pred_iris)