LOOCV, Путаница Матрица и KNN в R - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь написать свою собственную функцию KNN. Я не использую встроенную функцию в R, потому что я хочу использовать разные расстояния (нормы, такие как L_0.1) вместо евклидова расстояния. Кроме того, я хотел бы использовать LOOCV для разделения набора данных. Ранее я разделял свои данные, как показано в приведенном ниже коде, и все идет хорошо. Но мне нужно использовать LOOCV.

wdbc<- read.table("http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data",sep=",",stringsAsFactors = FALSE)
     wdbc<-wdbc[-1]
     normalize <- function(x) {
       return ((x-min(x)) / (max(x) - min(x)))}
     wdbc_n <- as.data.frame(lapply(wdbc[2:31], normalize))
     wdbc_train<-wdbc_n[1:568,]
     wdbc_test<-wdbc_n[569:569,]

Я также попытался написать код LOOCV.

LOOOCV_training=list()
for(i in 1:nrow(wdbc_n)){
  LOOOCV_training[[i]]=wdbc_n[-i,]}
View(LOOOCV_training)

LOOOCV_testing=list()
for(i in 1:nrow(wdbc_n)){
  LOOOCV_testing[[i]]=wdbc_n[i,]}

Мои вопросы

Как поставить разделение LOOCV вместо разделения, которое я делал раньше? Другими словами, я использовал некоторые коды, такие как Dist=matrix(0,nrow=nrow(wdbc_train),ncol=nrow(wdbc_test)) Было легко справиться с первым разделением, которое я делал раньше, но теперь я не уверен из-за LOOCV, обучите модель на всех тренировочных наборах, кроме одного тестового набора, и повторите этот процесс n раз. Размер моих данных - 569 32, что означает непростое выполнение процесса один за другим.

Кроме того, как рассчитать матрицу смешения с LOOCV, так как LOOCV повторял процесс много раз, что означает, что у меня будет много матриц смешения !!

EDIT

Для большей ясности предположим, что вместо этого я хочу использовать LOOCV split в следующем коде (предыдущие коды).

Dist=matrix(0,nrow=nrow(wdbc_train),ncol=nrow(wdbc_test))
Dist2=array(0,nrow(wdbc_test))
for (i in 1:nrow(wdbc_train)){
  for (j in 1:nrow(wdbc_test)){
    Dist[i,j]=norm(as.matrix(wdbc_train[i,]-wdbc_test[j,]),type="i")}}
...