R:PDA有两种方式,但效果不同?

时间:2014-05-31 09:55:10

标签: r cross-validation

我正在开展一个项目,我必须对乳腺癌的数据进行分类。我想用PDA。我试图通过10倍交叉验证找到lambda的最佳值。 我开始时:

breast[,1] <- as.numeric(breast[,1])   #Because this code only works when the classes are numeric (so not factors like they were)

我发现这可以通过以下方式完成:

library(penalizedLDA)
PenalizedLDA.cv(breast[,-1], breast[,1], lambdas = seq(0,0.5,by=.01), nfold = 10)

但我也可以手动执行此操作:

lam <- seq(0,1,by=.01)
length(lam)
error.lam <- rep(0, length(lammie))
for (la in 1:101){
  error.pda <- rep(0,10)
  for (fold in 1:k){  
   currentFold <- folds[fold][[1]]
   breast.pda = fda(Diagnosis~., data=breast[-currentFold,], method=gen.ridge, lambda = lam[la])
   pred.pda = predict(breast.pda, newdata= breast[currentFold,-1], type="class")
   CV.table=table(breast[currentFold,1],pred.pda)
   error.pda[fold] <- CV.table[1,2]+CV.table[2,1] 
  }
  error.lam[la] <- sum(error.pda)/nrow
}

现在奇怪的是,我成了两个不同的结果。对于第一个,我的CV误差为4.4%,lambda值为0.055。而对于第二个,我变为CV错误6.32%和lamba 0.55。有人可以解释一下这两种方法之间的区别吗?

西尔克

0 个答案:

没有答案