Как сделать CV тест, чтобы изучить ошибку классификации LDA в R

Пожалуйста, дайте мне простой пример. Я в беспокойстве! Я попробовал функцию errorest и приведу ее в качестве примера, поскольку она дает 10-кратное резюме LDA. Но когда я использовал свои собственные данные, он просто сказал, что прогноз не числовой. Я не знаю почему! Спасибо! Код R таков. Я хочу сделать двоичный LDA, поэтому я генерирую данные:

library(MASS)
n=500
#generate x1 and x2. 
Sigma=matrix(c(2,0,0,1),nrow=2,ncol=2)
#Logistic model with parameter{1,4,-2}
beta.star=c(1,4,-2)
Xtilde=mvrnorm(n=n,mu=c(0.5,2),Sigma=Sigma)
X=cbind(1,Xtilde)
z=X%*%beta.star
#pass througn an inv-logit function
pr=exp(z)/(1+exp(z))
#Simulate binary response
# The "probability of respoonse is a vector"
y=rbinom(n,1,pr)

Затем я использую LDA, чтобы получить модель:

library(MASS)
df.cv=data.frame(V1=Xtilde[,1],V2=Xtilde[,2])
exper1<-lda(y~V1+V2,data=df.d)
plda<-predict(exper1,newdata=df.cv)

Наконец, я хочу использовать резюме с исходными данными и увидеть ошибку. Я делаю это неправильно:

mypredict.lda <- function(object, newdata)
  predict(object, newdata = newdata)$class
errorest(y ~ ., data=data.frame(da), model=lda,estimator ="cv", predict= as.numeric(mypredict.lda))

Что я должен сделать, чтобы получить ошибку с CV?

1 ответ

Итак, мы начнем со всего вашего предыдущего кода, настраивая поддельные данные

library(MASS)
n=500
#generate x1 and x2. 
Sigma=matrix(c(2,0,0,1),nrow=2,ncol=2)

#Logistic model with parameter{1,4,-2}
beta.star=c(1,4,-2)
Xtilde=mvrnorm(n=n,mu=c(0.5,2),Sigma=Sigma)
X=cbind(1,Xtilde)
z=X%*%beta.star

#pass througn an inv-logit function
pr=exp(z)/(1+exp(z))
#Simulate binary response
y=rbinom(n,1,pr)

#Now we do the LDA
df.cv=data.frame(V1=Xtilde[,1],V2=Xtilde[,2])

Ниже мы разделим данные на две части; тренировочный набор и тестовый набор. Если вы хотите сделать 10-кратную перекрестную проверку, вы должны использовать 0,9 вместо 0,8 (0,8 соответствует 80% обучению, 20% - пятикратной перекрестной проверке).

library(ROCR)
inds=sample(1:nrow(df.cv),0.8*nrow(df.cv))
df.train=df.cv[inds,]
df.test=df.cv[-inds,]
train.model = lda(y[inds] ~ V1+V2, data=df.train)

Из обученной модели мы прогнозируем на тестовом наборе. Ниже я определяю прогнозируемые значения, а затем оцениваю точность прогнозов. Здесь я использую ROC-кривую, но вы можете использовать любую метрику, которую хотите. Я не понял, что вы имели в виду по ошибке.

preds=as.numeric(predict(train.model, df.test)$class)
actual=y[-inds]
aucCurve=performance(prediction(preds,actual), "tpr", "fpr")
plot(aucCurve)

Площадь под этой кривой ROC является показателем точности прогнозирования. Значения ближе к 1 означают, что у вас есть хорошие возможности прогнозирования.

auc=performance(prediction(preds,actual), "auc")
auc@y.values

Надеюсь, это помогло, и это не совсем неправильно. Другие люди, пожалуйста, присоединяйтесь с исправлениями или разъяснениями.

Другие вопросы по тегам