Я пытаюсь выполнить задание для разделения данных (обучающий набор, проверочный набор и тестовый набор), чтобы найти наиболее подходящий классификатор - в этом случае k, поскольку я использую k-ближайших соседей (функция kknn, часть пакета Kernlab). Однако, когда я использую приведенный ниже исходный код для рандомизации процесса разделения данных и запускаю циклы для определения наиболее точных значений 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
}
После применения функции I unlist () к списку по порядку чтобы получить матрицу, я использую функцию which () и max (), чтобы определить значение k с максимальной точностью. С каждым прогоном l oop я получаю широкий диапазон различных значений k, каждое из которых отличается от предыдущих прогонов l oop. Когда я применяю тот же тип l oop для своего тестового набора (data_test), я сталкиваюсь с той же проблемой. Может ли кто-нибудь помочь мне найти решение для того, чтобы отточить конкретное или набор определенных последовательных значений k?