2016-10-06 5 views
5

데이터 세트가 있고 모델을 빌드하고 싶습니다. caret 패키지를 사용하는 것이 좋습니다. 내 데이터는 실제로는 시계열이지만 문제는 시계열과 관련이 없으며 데이터 파티션으로 CreateTimeSlices으로 작업한다는 것입니다.모델 성능 계산에서 누락 된 값 제외

데이터에 특정 금액의 누락 값 NA가 있으며이 데이터를 caret 코드와 별도로 전송합니다.

# a logical vector same size as the data, which obs were imputed NA 
imputed=c(FALSE, FALSE, FALSE, TRUE, FALSE, FALSE) 
imputed[imputed] <- NA; print(imputed) 
#### [1] FALSE FALSE FALSE NA FALSE FALSE 

내가 NA을 제외하거나 다른 기법을 전가 중 하나에 캐럿 train 기능의 옵션이 알고 : 나는 또한 그 위치에 대한 기록을 유지했다. 그건 내가 이 아니라입니다. 이미 귀속 된 데이터 집합에 모델을 구축해야하지만 표시기 (RMSE, MAE, ...) 오류 계산에서 귀속 된 포인트를 제외하고 싶습니다.

캐럿에서이 작업을 수행하는 방법을 알지 못합니다. 내 첫 번째 스크립트에서 나는 수동으로 전체 교차 검증을 시도하고 나는 사용자 정의 오류 측정을했다 :

actual = c(5, 4, 3, 6, 7, 5) 
predicted = c(4, 4, 3.5, 7, 6.8, 4) 
Metrics::rmse(actual, predicted) # with all the points 
#### [1] 0.7404953 
sqrt(mean((!imputed)*(actual-predicted)^2 , na.rm=T)) # excluding the imputed 
#### [1] 0.676757 

가 어떻게 caret에서 일을 이런 식으로 처리 할 수 ​​있습니까? 아니면 손으로 모든 것을 코딩하지 않는 또 다른 방법이 있습니까?

+0

'캐럿'이 아닌 맞춤 코드가 필요한 것 같습니다. –

+0

나는 또한'weights' 인수를 사용하는 것을 고려 했었지만 그것이 고려 될 때 또는 밝혀지지 않을 때 명확하지 않습니다. – agenis

답변

4

당신이 이것을 찾고 있다면 알고 싶지 않지만 여기에 함수를 작성하여 간단한 해결책이 있습니다.

i=which(imputed==F) ## As you have index for NA values 

metric_na=function(fun, actual, predicted, index){ 
    fun(actual[index], predicted[index]) 
} 

metric_na(Metrics::rmse, actual, predicted, index = i) 
0.676757 
metric_na(Metrics::mae, actual, predicted, index = i) 
0.54 

원하는 메트릭을 계산하는 동안 색인을 직접 사용할 수도 있습니다.

Metrics::rmse(actual[i], predicted[i]) 
+0

고마워, 정말 도움이되는 좋은 기능이다. 나는 그것을 확실히 구현할 것이다. 아무도 캐럿으로 가능하다고 생각하지 않는다. : – agenis

+0

나는 그것이 가능할 것이라고 생각하지만, 약간의 노력이 필요할 것이다. 또한, [this] (http://stackoverflow.com/questions/28232658/how-to-change-metrics-using-the-librarycaret/28278334#28278334) 게시물을 확인하십시오. –