LDA模型的简历

时间:2019-03-10 14:22:48

标签: cross-validation linear-discriminant

我是R的初学者。我想作图 “来自错误分类的总错误”与 使用下面的代码作为第一个功能的“ True”组的“ prior”。我的绘图的垂直轴应该是CV结果的总误差的平均值,但是我的结果是第99个“ 0.5”的数组,该数组导致一条水平线。

我想知道我是否错过了循环中的任何内容,或者实际上我没有很好地构建LDA和预测模型,所以我得到了这个结果。 “ prior.p1”是我为“ TRUE”组设置的优先级,而我的绘图目标是找到导致总误差最小的priority.p1。

任何建议将不胜感激。谢谢!

代码如下:

K=10
    CV.error.f <- function(data=Liver.df,k=K,t1=0.01,t2=0.99,m=99,
                           Rounds=20) {
      # k-fold CV; uses m=99 thresholds from t1 to t2
      #s <- seq(from=0.01, to=0.99, by=0.01)
      #w <-length(s)
      Err.arr <- array(0,c(m,Rounds,K))
      for (i in 1:Rounds) {
        #cond <- (fold==j)
        fold=sample(rep(1:K,length=nrow(data)))
        for (j in 1:K) {
          cond <- (fold==j)
          s <- seq(from=0.01, to=0.99, by=0.01)
          w <-length(s)      
          for (q in 1:w) {
            lda.obj.test2 <- lda(Y ~., data = data[!cond,], prior=c(1-s[q],s[q]))
            prior.p1 <-s
          #cond <- (fold==j)
            #lda.obj.test <- lda(Y ~., data = data[!cond,])
          #lda.obj <- lda(Y ~., 
          #           data = data[!cond,])
          #prior.p1 <-s
          Pred<- predict(lda.obj.test2, newdata = data[cond,],
                         type = "response")
          Truth=(data[cond,]$Y=="Severe") # Truth is logical
          for (ind in 1:m) {
            prediction <- (Pred$class=="Severe")
            Err.arr[ind,i,j] <- mean((prediction==F)&(Truth==T)) +
              mean((prediction==T)&(Truth==F)) # not using "table"
          }
          }
        }
      }
      list(Err=Err.arr, Threshold= prior.p1)
    } 

0 个答案:

没有答案