2016-08-18 4 views
0

RMSEとRsquared以外のメトリックを、キャレットパッケージで作成した線形モデルの出力に追加したいとします。私が理解から、意志の出力以下のコードを繰り返し交差検定RMSEとRsquared:キャレットパッケージのデフォルトのtrain()出力にメトリックを追加する

library(caret) 
lm_reg1 <- train(log1p(mpg) ~ log1p(hp) + log1p(disp), 
       data = mtcars, 
       trControl = trainControl(method = "repeatedcv", 
              number = 10, 
              repeats = 10), 
       method = 'lm') 
lm_reg 

出力:私はsummaryFunctionを変更することで、カスタムメトリックへの出力を変更することができます知っている

Linear Regression 

32 samples 
10 predictors 

No pre-processing 
Resampling: Cross-Validated (10 fold, repeated 10 times) 
Summary of sample sizes: 30, 29, 28, 29, 29, 28, ... 
Resampling results: 

    RMSE  Rsquared 
    0.1134972 0.8808378 

trainControl内で、metricパラメータの名前を参照します。ここで私はそれが両対数モデルのMAPEを算出し、作成したものの一例です:

mape <- function(actual, predicted){ 
    mean(abs((actual - predicted)/actual)) 
} 
mapeexpSummary <- function (data, 
          lev = NULL, 
          model = NULL) { 
    out <- mape(expm1(data$obs), expm1(data$pred)) 
    names(out) <- "MAPEEXP" 
    out 
} 
lm_reg2 <- train(log1p(mpg) ~ log1p(hp) + log1p(disp), 
       data = mtcars, 
       trControl = trainControl(method = "repeatedcv", 
             number = 10, 
             summaryFunction = mapeexpSummary, 
             repeats = 10), 
       metric = 'MAPEEXP', 
       method = 'lm') 
lm_reg2 

出力:

Linear Regression 

32 samples 
10 predictors 

No pre-processing 
Resampling: Cross-Validated (10 fold, repeated 10 times) 
Summary of sample sizes: 28, 29, 29, 28, 28, 30, ... 
Resampling results: 

    MAPEEXP 
    0.1022028 

単一の出力にそれらを追加する方法はありますか?私はこれらの値をすべて保存することを検討していますが、そうするために2つの同一モデルを作成しないようにしたいと考えています。

答えて

0

あなたのmapeexpSummaryでRMSEとRsquaredで追加しますか?

mapeexpSummary <- function (data, 
    lev = NULL, 
    model = NULL) { 
    c(MAPEEXP=mape(expm1(data$obs), expm1(data$pred)), 
     RMSE=sqrt(mean((data$obs-data$pred)^2)), 
     Rsquared=summary(lm(pred ~ obs, data))$r.squared) 
} 
+0

ありがとうございました! –

関連する問題