CV для модели LDA - PullRequest
       20

CV для модели LDA

0 голосов
/ 10 марта 2019

Я новичок в R. И я хотел бы отобразить «общую ошибку из-за неправильной классификации» против «предыдущей» для «Истинной» группы », используя приведенный ниже код в качестве первой функции.Вертикальная ось для моего графика должна быть средней величиной от общего количества ошибок в результате CV, но мой результат - массив 99-й «0,5», который привел к горизонтальной линии.

Интересно, я что-то пропустил в своих циклах, или я не очень хорошо построил модель LDA и прогнозирования, поэтому я получил этот результат.«Prior.p1» - это априор, который я установил для группы «ИСТИНА», и моя цель для графика - найти prior.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)
    } 
...