【发布时间】:2020-09-18 20:38:10
【问题描述】:
希望你们明白,在通用数据集上复制这样的东西是很困难的。
基本上,我要做的是执行 K-NN,对七个不同的 k 值使用两种不同大小的测试和训练集。
我的主要问题是 res 应该是一个向量,存储相同训练集大小的所有准确度值,但每次迭代显示一个值,这不允许我绘制准确度图因为它们看起来是空的。
你知道如何解决这个问题吗?
数据可直接在 R 上免费获得。
data("Sonar")
#Randomization of the sample
set.seed(123)
random <- sample(rep(1:dim(Sonar)[1]))
Sonar <- Sonar[random,]
head(Sonar)
for (i in c(50,100)){ #train/test set size
sonar.train <- Sonar[1:i,-61]
sonar.train.label <- Sonar[1:i,61]
sonar.test <- Sonar[(1+i) :208,-61]
sonar.test.label <- Sonar[(1+i) :208 ,61]
res <- rep(NA,7)
for (j in c(3,5,7,9,11,13,15)){ #values of k
mod = knn(train= sonar.train, test = sonar.test, cl = sonar.train.label, k = j) #classification for test set
err = sum(sonar.test.label==mod) #accuracy
res[match(j,c(3,5,7,9,11,13,15))] = err/length(mod) #put accuracy value in vector
print(res)
plot(x = c(3,5,7,9,11,13,15) ,y = res, type = "l" ,col = "blue", xlab = "Neighbours", ylab = "Accuracy") #plot the accuracy graphs for each of the two different train/test sets
res <- rep(NA,7)
}
}
#output
>
0.6835443 NA NA NA NA NA NA
NA 0.6582278 NA NA NA NA NA
NA NA 0.6075949 NA NA NA NA
NA NA NA 0.6265823 NA NA NA
NA NA NA NA 0.5949367 NA NA
NA NA NA NA NA 0.5949367 NA
NA NA NA NA NA NA 0.5506329
0.6759259 NA NA NA NA NA NA
NA 0.6111111 NA NA NA NA NA
NA NA 0.5648148 NA NA NA NA
NA NA NA 0.5833333 NA NA NA
NA NA NA NA 0.5925926 NA NA
NA NA NA NA NA 0.5740741 NA
NA NA NA NA NA NA 0.5740741
准确度图显示为空,并且 x 轴上的 k 有不同的标签。
感谢您阅读并帮助我!
【问题讨论】:
标签: r for-loop plot classification supervised-learning