2015-02-04 2 views
0

약 100,000 행의 데이터에서 두 개의 다른 모델 (분할 모델)로 분할하는 것보다 하나의 모 놀리 식 모델을 사용할 때의 효과를 짚고 있습니다.여러 모델에 대해 predict.glm을 효율적으로 사용하십시오.

어떤 이유를 들어
preds <- numeric(nrow(DF)) 
for (i in 1:nrow(DF)) 
{ 
    if (DF[i,]$col == condition) 
    { 
    preds[i] <- predict(glm1, DF[i,]) 
    } 
    else 
    { 
    preds[i] <- predict(glm2, DF[i,]) 
    } 
} 

,이 너무 같은 전체 데이터 프레임을 눌러 얻기에 비해 특히, 매우 느리게가는 것 같습니다 : 이렇게하려면, 난 그렇게처럼 내 분할 모델에서 얻는 결과입니다

preds <- predict(glm1,DF) 

첫 번째 스 니펫을 최적화하는 방법에 대한 아이디어가 있습니까? 당신이 저장 벡터에서 그들을 원하는 경우

+0

나는 천천히 놀랍지 않습니다. 적절한 쌍의 'newdata'인수를 사용하여 두 번의 '예측'호출을 통해이를 얻을 수있는 것처럼 보입니다. –

+0

다른 주석에서 언급했듯이 ROC를 검토하는 것과 같은 일을 할 수 있도록 데이터 프레임의 순서와 동일한 순서를 유지해야합니다. – user1775655

답변

1
preds1 <- predict(glm1, DF[DF$col == condition, ]) 
preds2 <- predict(glm2, DF[DF$col != condition,]) 

단지 c()를 사용합니다.

실제 및 예상 값이 condition으로 층화 된 데이터 프레임을 만들려면 먼저 'actual'및 cond 변수를 보유하는 구조를 만드십시오.이 중 일부는 현재 특정 구조에 지정되지 않았거나 특정 구조에 속하지 않습니다. 그래서 그들은 "actual"이라는 열 이름을 가지고 DF이라는 데이터 프레임에 있다고 가정합니다 :

compare.df <- data.frame(act=DF$actual, cond =DF$col, pred = NA) 
compare.df[DF$col==condition, 'pred'] <- 
     predict(glm1, DF[DF$col == condition, ]) 
compare.df[DF$col !=condition, 'pred'] <- 
     predict(glm2, DF[DF$col != condition, ]) 
+0

여기에서 가장 중요한 문제는 예상 값을 실제 값과 비교하려는 경우, 원래 DM의 원래 순서를 잃어버린 것입니다. – user1775655

관련 문제