[ad_1]
Neste post, apresento alguns exemplos de uso de crossval
em um modelo linear e no popular xgboost
e randomForest
modelos. o medida de erro usado é o erro médio quadrático da raiz (RMSE) e atualmente é a única opção implementada.
Instalação
No Github, no console R:
devtools::install_github("thierrymoudiki/crossval")
Demo
Usamos um conjunto de dados simulado para esta demonstração, contendo 100 exemplos e 5 variáveis explicativas:
# dataset creation
set.seed(123)
n
Modelo linear
X
contém as variáveis explicativasy
é a respostak
é o número de dobras na validação cruzada de dobras krepeats
é o número de repetições do procedimento de validação cruzada com dobra k
Modelo linear exemplo:
crossval::crossval_ml(x = X, y = y, k = 5, repeats = 3)
## $folds
## repeat_1 repeat_2 repeat_3
## fold_1 0.8987732 0.9270326 0.7903096
## fold_2 0.8787553 0.8704522 1.2394063
## fold_3 1.0810407 0.7907543 1.3381991
## fold_4 1.0594537 1.1981031 0.7368007
## fold_5 0.7593157 0.8913229 0.7734180
##
## $mean
## [1] 0.9488758
##
## $sd
## [1] 0.1902999
##
## $median
## [1] 0.8913229
Exemplo de modelo linear, com conjunto de validação:
crossval::crossval_ml(x = X, y = y, k = 5, repeats = 3, p = 0.8)
## $folds
## repeat_1 repeat_2 repeat_3
## fold_training_1 1.1256933 0.9144503 0.9746044
## fold_validation_1 0.9734644 0.9805410 0.9761265
## fold_training_2 1.0124938 0.9652489 0.7257494
## fold_validation_2 0.9800293 0.9577811 0.9631389
## fold_training_3 0.7695705 1.0091999 0.9740067
## fold_validation_3 0.9753250 1.0373943 0.9863062
## fold_training_4 1.0482233 0.9194648 0.9680724
## fold_validation_4 0.9984861 0.9596531 0.9742874
## fold_training_5 0.9210179 1.0455006 0.9886350
## fold_validation_5 1.0126038 0.9658146 0.9658412
##
## $mean_training
## [1] 0.9574621
##
## $mean_validation
## [1] 0.9804529
##
## $sd_training
## [1] 0.1018837
##
## $sd_validation
## [1] 0.02145046
##
## $median_training
## [1] 0.9740067
##
## $median_validation
## [1] 0.975325
Random Forest
randomForest exemplo:
require(randomForest)
# fit randomForest with mtry = 4
crossval::crossval_ml(x = X, y = y, k = 5, repeats = 3,
fit_func = randomForest::randomForest, predict_func = predict,
packages = "randomForest", fit_params = list(mtry = 4))
## $folds
## repeat_1 repeat_2 repeat_3
## fold_1 0.9820183 0.9895682 0.8752296
## fold_2 0.8701763 0.8771651 1.2719188
## fold_3 1.1869986 0.7736392 1.3521407
## fold_4 1.0946892 1.1204090 0.7100938
## fold_5 0.9847612 1.0565001 0.9194678
##
## $mean
## [1] 1.004318
##
## $sd
## [1] 0.1791315
##
## $median
## [1] 0.9847612
randomForest
com parâmetro mtry
= 4 e um conjunto de validação:
crossval::crossval_ml(x = X, y = y, k = 5, repeats = 2, p = 0.8,
fit_func = randomForest::randomForest, predict_func = predict,
packages = "randomForest", fit_params = list(mtry = 4))
## $folds
## repeat_1 repeat_2
## fold_training_1 1.0819863 0.9096807
## fold_validation_1 0.8413615 0.8415839
## fold_training_2 0.9507086 1.0014771
## fold_validation_2 0.5631285 0.6545253
## fold_training_3 0.7020669 0.9632402
## fold_validation_3 0.5090071 0.9129895
## fold_training_4 0.8932151 1.0315366
## fold_validation_4 0.8299454 0.7147867
## fold_training_5 0.9158418 1.1093461
## fold_validation_5 0.6438410 0.7644071
##
## $mean_training
## [1] 0.9559099
##
## $mean_validation
## [1] 0.7275576
##
## $sd_training
## [1] 0.1151926
##
## $sd_validation
## [1] 0.133119
##
## $median_training
## [1] 0.9569744
##
## $median_validation
## [1] 0.7395969
xgboost
Nesse caso, a resposta e as covariáveis são nomeadas “rótulo” e “dados”. Então (por enquanto), fazemos o seguinte:
# xgboost example -----
require(xgboost)
f_xgboost
Em forma xgboost
com nrounds
= 10:
crossval::crossval_ml(x = X, y = y, k = 5, repeats = 3,
fit_func = f_xgboost, predict_func = predict,
packages = "xgboost", fit_params = list(nrounds = 10,
verbose = FALSE))
## $folds
## repeat_1 repeat_2 repeat_3
## fold_1 0.9487191 1.2019850 0.9160024
## fold_2 0.9194731 0.8990731 1.2619773
## fold_3 1.2775092 0.7691470 1.3942022
## fold_4 1.1893053 1.1250443 0.7173760
## fold_5 1.1200368 1.1686622 0.9986680
##
## $mean
## [1] 1.060479
##
## $sd
## [1] 0.1965465
##
## $median
## [1] 1.120037
Em forma xgboost
com `nrounds = 10 e conjunto de validação:
crossval::crossval_ml(x = X, y = y, k = 5, repeats = 2, p = 0.8,
fit_func = f_xgboost, predict_func = predict,
packages = "xgboost", fit_params = list(nrounds = 10,
verbose = FALSE))
## $folds
## repeat_1 repeat_2
## fold_training_1 1.1063607 1.0350719
## fold_validation_1 0.7891655 1.0025217
## fold_training_2 1.0117042 1.1723135
## fold_validation_2 0.4325200 0.5050369
## fold_training_3 0.7074600 1.0101371
## fold_validation_3 0.1916094 0.9800865
## fold_training_4 0.9131272 1.2411424
## fold_validation_4 0.8998582 0.7521359
## fold_training_5 0.9462418 1.0543695
## fold_validation_5 0.5432650 0.6850912
##
## $mean_training
## [1] 1.019793
##
## $mean_validation
## [1] 0.678129
##
## $sd_training
## [1] 0.147452
##
## $sd_validation
## [1] 0.2600431
##
## $median_training
## [1] 1.023388
##
## $median_validation
## [1] 0.7186136
Nota: Atualmente, estou procurando um show. Você pode me contratar no Malt ou me enviar um email: thierry dot moudiki às pm me dot. Eu posso fazer estatísticas descritivas, preparação de dados, engenharia de recursos, calibração de modelos, treinamento e validação e interpretação de resultados de modelos. Sou fluente em Python, R, SQL, Microsoft Excel, Visual Basic (entre outros) e francês. Meu resumo? Aqui!
Sob licença Creative Commons Attribution 4.0 International.
Relacionado
[ad_2]