我正在尝试编写自己的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")}}