Я новичок в 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)
}