我正在开展一个项目,我必须对乳腺癌的数据进行分类。我想用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。有人可以解释一下这两种方法之间的区别吗?
西尔克