我正在尝试对数据拆分(训练集、验证集和测试集)进行分配,以找到最合适的分类器——在本例中为 k,因为我使用的是 k-最近邻(kknn 函数,kernlab 的一部分)包裹)。但是,当我使用下面的初始代码来随机化数据拆分过程并运行 for 循环以确定最准确的 k 值时,每次运行循环时都没有得到一致的 k 值。数字到处都是。我是否正确分区了我的数据?我在上一篇文章中因为没有生成最小可重现示例 (MRE) 而得到纠正,所以这是我尝试提供 MRE 代码的尝试:
#split data set into three groups, using "random" process in order to try to eliminate bias:
#currently an 80-10-10 split
#'data' in the code represents a data.frame with well over 100 data points
idx <- sample(seq(1, 3), size = nrow(data), replace = TRUE, prob = c(.8, .1, .1))
data_train <- data[idx == 1,] #training set
data_test <- data[idx == 2,] #test set
data_valid <- data[idx == 3,] #validation set
#Here is how I initialize my list to store the accuracy values for each k:
kknn_acc_list = list()
#Here is my for loop to test validation set:
for(i in 1:100){
model_KNN <-kknn(V5~., data_train, data_valid, k = i, scale = TRUE)
pred <- round(fitted(model_KNN)) == data_valid$V11 #predictions from the fitted function
x = sum(pred) / nrow(data_valid) #accuracy measurement -- average number of predictions returned TRUE
kknn_acc_list[[i]] = x
}
# validation set accuracy list:
kknn_acc_list
}
在将我的 unlist() 函数应用于列表以获得矩阵后,我使用 which() 和 max() 函数以最大精度确定 k 值。每次循环运行时,我都会得到各种不同的 k 值,每个值都与循环的前一次运行不同。当我为我的测试集(data_test)应用相同类型的循环时,我遇到了同样的问题。谁能帮我找到一个解决方案,以磨练特定或一组特定一致的 k 值?