2016-10-01 17 views
0

여러 모델에서 교차 검증 기능을 수행했습니다.R에서 여러 예측 모델에 대한 정확도 코드를 최적화하는 방법은 무엇입니까?

은 내가 계산 할 모델 기능을 가지고 있고, 교차 검증에 나는 각 반복에 대한 각각의 예측에 대해, 클래스 또는 레이블과 results라는 데이터 프레임을 얻을 그래서 전화 :

head(results) 
    iteration class ksvm rf 
65   1  4 4 4 
306   1  2 2 2 
300   1  4 4 4 
385   1  2 2 2 
431   1  2 2 2 
205   1  4 4 4 

(색인은 샘플링되는 데이터에서 비롯되어 무시할 수 있음)

5 배 교차 유효성 검사가 있으므로이 경우에 ksvmrf을 예측하는 5 번의 반복이 있습니다. (이러한 algorithms라는 변수에 저장됩니다

을 내가 정확성이 방법을 계산하고이 후 :.

results %>% 
    group_by(iteration) %>% 
    summarise(acc_ksvm = sum(ksvm == class)/n() , acc_rf = sum(rf == class)/n()) 

출력 :

iteration acc_ksvm acc_rf 
     (int)  (dbl)  (dbl) 
1   1 0.9603175 0.9603175 
2   2 0.9760000 0.9680000 
3   3 0.9603175 0.9523810 
4   4 0.9840000 0.9920000 
5   5 0.9444444 0.9523810 

질문 : 이 방식이 있는가 그것을 최적화 할 수 있습니까? 결국 모델을 늘릴 것이다, 그냥 함수에서 변수 algorithms 전달하고 manuall없이 모든 모델에 대한 정확성을 계산할 y 각 모델에 대해 summarise(acc_ksvm = sum(ksvm == class)/n() , acc_rf = sum(rf == class)/n())을 작성하십시오.

적용 할 수 있습니까? 또는 모델별로 그룹화하기 위해 내 df이 빌드 된 방식을 변경해야합니까?

감사합니다. sum(ksvm == class)/n() 때문에

+0

무엇 최적화를 원하십니까? 속도? 이것은 꽤 우아한 해결책 인 것 같습니다. 만약'algorithm' 벡터에 모델을 추가하기 만하면, 위의'dplyr' 코드는 여러분의 데이터가 거대한 것이 아니라고 가정하고 많은 매개 변수를 테스트하지 않을 것이라고 생각합니다. 많은 모델. – blacksite

+0

맞습니다. 아마도 Optimize * 대신 Automate *를 써야 할 수도 있습니다. –

답변

1

정말 클래스에 알고리즘 열의 TRUE 일치의 그룹 평균 사용 먼저 논리 값 열 (TRUE/FALSE 일치)을 만드는 것을 고려하고 dplyr의 다른 모든 컬럼에서 summarise_each :

algorithms <- c("alg1", "alg2", "alg3", "alg4", "alg5") 

results[algorithms] <- sapply(algorithms, function(i){ 
    results[i] == results$class 
}) 

summarydf <- 
    results[c("iteration", algorithms)] %>% 
    group_by(iteration) %>% 
    summarise_each(funs(mean)) %>% 
    setNames(c("iteration", paste0("acc_", algorithms))) 
+0

이것은 정말로 흥미 롭습니다, 고맙습니다! –