2014-12-09 2 views
0

간단한 예를 들어주세요. 나는 걱정하고있다! 나는 erorest 기능을 시험해보고 LDA의 10 배에 해당하는 예를 제시합니다. 그러나 내 데이터를 사용했을 때 예측은 숫자가 아니라고 말한 것입니다. 나는 이유를 모른다! 고맙습니다! R 코드는 다음과 같습니다.CV 테스트를 통해 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) 

마지막으로 내가 일 원래의 데이터로 CV를 사용하고보고 싶어 :

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를 사용 : 그래서 내가 데이터를 생성 바이너리 LDA를 수행 할 오류. 나는 잘못했다 :

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로 오류를 얻으려면 어떻게해야합니까?

+0

'mypredict.lda'를 함수로 정의했습니다. 개체에 모델에 기초한 예상 값이 포함되어 있지 않습니다. 함수를'as.numeric'에 강요하지 말아라. –

답변

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 배 교차 유효성 검사를 수행하려는 경우, 당신은 훈련 모델에서

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) 

(80 % 열차 5 배 교차 검증이다, 20 % 시험, 0.8 대응) 0.9 대신 0.8을 사용, 우리는 테스트 세트를 예측합니다. 아래에서는 예측 된 값을 결정한 다음 예측의 정확성을 평가합니다. 여기서는 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") 
[email protected] 

희망적으로 도움이되었지만 끔찍한 것은 아닙니다. 다른 사람들은 수정이나 설명으로 차임합니다.