R中的LOOCV,混淆矩阵和KNN

时间:2018-07-03 14:09:05

标签: r cross-validation knn

我正在尝试编写自己的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计算混淆矩阵,这意味着我会有很多混淆矩阵!

编辑

更清楚地说,假设我想在以下代码(以前的代码)中使用LOOCV拆分。

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")}}

0 个答案:

没有答案