проблема разделения данных; К значения не кажутся правильными - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь выполнить задание для разделения данных (обучающий набор, проверочный набор и тестовый набор), чтобы найти наиболее подходящий классификатор - в этом случае k, поскольку я использую k-ближайших соседей (функция kknn) , Однако, когда я использую приведенный ниже исходный код для рандомизации процесса разделения данных и запускаю циклы для определения наиболее точных значений k, я не получаю непротиворечивые значения k каждый раз, когда запускаю циклы. Числа ВСЕ по всему месту. Правильно ли я разделил свои данные?

rm(list = ls())

library(kknn)
data <- read.table('D:/data.txt', stringsAsFactor = FALSE, header = FALSE)

#split data set into three groups, using "random" process in order to try to eliminate bias:
#currently an 80-10-10 split

idx <- sample(seq(1, 3), size = nrow(data), replace = TRUE, prob = c(.8, .1, .1))
data_train <- data[idx == 1,]
data_test <- data[idx == 2,]
data_valid <- data[idx == 3,]

kknn_acc_list = list()

#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
  x = sum(pred) / nrow(data_valid)

  kknn_acc_list[[i]] = x
}

# validation set accuracy list:
kknn_acc_list

unl_kknn_acc_list = unlist(kknn_acc_list)
best_index_k = which(unl_kknn_acc_list==max(unl_kknn_acc_list))
best_index_k

test_acc_list = list()

# for loop for test set:
for(i in 1:100){
  model_KNN <-kknn(V5~., data_train, data_test, k = i, scale = TRUE)
  pred <- round(fitted(model_KNN)) == data_valid$V11
  x = sum(pred) / nrow(data_valid)
  test_acc_list[[i]] = x
}

# test set accuracy list:
test_acc_list
unl_test_acc_list = unlist(test_acc_list)
best_test_index_k = which(unl_test_acc_list==max(unl_test_acc_list))
best_test_index_k

Любой совет, как сузить до конкретных c значений k? Я не получаю ответы от форума от программы Grad: (

...