我正在尝试写一个for语句来找到KNN中的最佳值k。不幸的是,我现在尝试了几次我的代码片段,但似乎它没有计算出正确的值。你知道这个陈述有什么问题吗
# Tune the value of K using K-Fold Cross Validation
bestaccuracy = 0
bestaccuracy
n.folds <- 100
for (k in 1:n.folds) {
set.seed(1)
knn.cvac <- knn.cv(train= x.australian.stan, cl= y.australian, k=k)
knn.cvac.table <- table (knn.cvac, y.australian)
knn.cvac.accuracy <- sum(diag(knn.cvac.table))/sum(knn.cvac.table)
if(bestaccuracy< knn.cvac.accuracy) bestk=k
if(bestaccuracy< knn.cvac.accuracy) bestaccuracy = knn.cvac.accuracy}
print(bestk)
print(bestaccuracy)
答案 0 :(得分:1)
我在一些基于仿真的数据上进行了测试,它运行得很好!唯一需要注意的是,你可能有不同的Ks,你获得最高的准确度,你打印最大的K(因为它的编码方式)。
也许您可以将代码行更改为:
if(bestaccuracy< knn.cvac.accuracy) bestk=c(bestk, k)
因此,当您打印bestk时,您可以看到所有最佳K.