caret包介绍学习之train函数介绍
caret包在机器学习会经常⽤到,它可以进⾏:数据预处理,特征选择,建模与参数优化,模型预测与检验。关于caret包在这些⽅⾯的应⽤可以参看⽂章:
本次介绍的是caret包在模型与参数优化上⾯的应⽤,主要函数为train函数
caret包中提供了很多种⼯具进⾏⾃动调整参数,train()函数作为接⼝,可以选择评估⽅法和度量性指标,⾃动寻最优的参数。
主要考虑的问题:
(1)训练哪种模型法,(2)模型中哪些参数可以调整,可以调整的空间多⼤,(3)选择评价的标准
总结:train函数可以建⽴很多种模型,⽽且对于模型还可以根据不同的评价标准⾃动调整参数来出最优的结果。所以train可以选择何种模型,选择调整哪些参数,调整参数的范围,和选择判断模型优劣的评判⽅式
train函数介绍
train(x, y, method = "rf", preProcess = NULL, ...,
weights = NULL, metric = ifelse(is.factor(y), "Accuracy",  "RMSE"),
maximize = ifelse(metric %in% c("RMSE", "logLoss", "MAE"), FALSE, TRUE),
trControl = trainControl(), tuneGrid = NULL,
tuneLength = ifelse(trControl$method == "none", 1, 3))
参数介绍:
x ⾏为样本,列为特征的矩阵或数据框。列必须有名字
y 每个样本的结果,数值或因⼦型
method 指定具体的模型形式,⽀持⼤量训练模型
preProcess 代表⾃变量预处理⽅法的字符向量。默认为空,可以是 “BoxCox”, “YeoJohnson”, “expoTrans”, “center”,“scale”, “range”, “knnImpute”, “bagImpute”, “medianImpute”, “pca”, “ica” and “spatialSign”.
weights 加权的数值向量。仅作⽤于允许加权的模型
metric 指定将使⽤什么汇总度量来选择最优模型。默认情况下,“RMSE” and “Rsquared” for regression and “Accuracy” and “Kappa” for classification
maximize 逻辑值,metric是否最⼤化
trControl 定义函数运⾏参数的列表。具体见下
tuneGrid 可能的调整值的数据框,列名与调整参数⼀致
tuneLength 调整参数⽹格中的粒度数量,默认时每个调整参数的level的数量
#例⼦
> #⾃动参数调整
> #使⽤caret包进⾏⾃动参数调整
> #举例
> #使⽤决策树模型对iris数据进⾏建模,
> #使⽤caret包中的train函数进⾏建模并进⾏⾃动参数调整
>
> library(caret)
> set.seed(1234)
> m_C50 <- train(Species~., data=iris,method='C5.0')
There were 40 warnings (use warnings() to see them)
> m_C50
C5.0
150 samples
4 predictor
3 classes: 'setosa', 'versicolor', 'virginica'
No pre-processing
Resampling: Bootstrapped (25 reps)
Summary of sample sizes: 150, 150, 150, 150, 150, 150, ...
Resampling results across tuning parameters:
model  winnow  trials  Accuracy  Kappa
rules  FALSE    1      0.9353579  0.9019696
rules  FALSE  10      0.9370844  0.9045424
rules  FALSE  20      0.9325835  0.8976068
rules  TRUE    1      0.9382311  0.9062975
rules  TRUE  10      0.9407392  0.9099910
rules  TRUE  20      0.9385430  0.9066136
tree  FALSE    1      0.9347127  0.9009924
tree  FALSE  10      0.9369888  0.9044013
tree  FALSE  20      0.9332286  0.8985820
tree    TRUE    1      0.9375860  0.9053246
tree    TRUE  10      0.9399845  0.9088007
tree    TRUE  20      0.9392443  0.9076915
Accuracy was used to select the optimal model using the
largest value.
The final values used for the model were trials = 10, model =
rules and winnow = TRUE.
结果中包含候选模型的评估列表,可以发现共建⽴并测试了12个模型,基于3个C5.0调整参数的组合:model, trials和winnow。每个候选模型都给出了模型精度和Kappa统计量,最下⽅还展⽰了最佳后选模型所对应的参数值。
Kappa⽤来统计衡量模型的稳定性
很差的⼀致性: <0.2
尚可的⼀致性: 0.2~0.4
中等的⼀致性: 0.4~0.6
不错的⼀致性: 0.6~0.8
很好的饿⼀致性:0.8~1
本例⼦我们选择的模型为C5.0,但是我们对调节哪些参数和选择的标准都没有进⾏设置,下⾯我们来看⼀下如何定制的调整参数。
下⾯介绍⼀下trainControl函数
trainControl()函数⽤来创建⼀系列的配置选项,这些选项考虑到了诸如重抽样策略以及⽤于选择最佳模型的度量这些模型评价标准的管理。以上我们专注于两个主要参数:method和selectionFunction.
以上我们使⽤的是五折交叉验证的重抽样⽅法;
selectionFuncton参数可以设定⼀函数⽤来在各个候选者中选择特定的模型,共三个函数:
best函数简单地选择具有最好的某特定度量值的候选者,默认选项
oneSE函数选择最好性能标准差之内的最简单的候选者
Tolerance选择某个⽤户指定⽐例之内的最简单的候选者
trainControl(method = "boot", number = ifelse(grepl("cv", method), 10, 25),
repeats = ifelse(grepl("[d_]cv$", method), 1, NA), p = 0.75,
search = "grid", initialWindow = NULL, horizon = 1,
fixedWindow = TRUE, skip = 0, verboseIter = FALSE, returnData = TRUE,
returnResamp = "final",.....)
参数介绍:
method 重抽样⽅法:“boot”, “boot632”, “optimism_boot”, “boot_all”, “cv”, “repeatedcv”, “LOOCV”,“LG
OCV” (for repeated training/test splits), “none” (only fits one model to the entire training set), “oob” (only for random forest, bagged trees, bagged earth, bagged flexible discriminant analysis, or conditional tree forest models), timeslice, “adaptive_cv”, “adaptive_boot” or “adaptive_LGOCV”
number folds的数量或重抽样的迭代次数
repeats 仅作⽤于k折交叉验证:代表要计算的完整折叠集的数量
p 仅作⽤于分组交叉验证:代表训练集的百分⽐
search Either “grid” or “random”,表⽰如何确定调整参数⽹格
总结:在train函数中定制调整参数的参数是trControl ,trGrid两个参数,⼀个参数可以设置重抽样的⽅法,⼀个参数⽤来设置需要调整哪些参数及调整的范围。使⽤trControl参数可以通过trainControl函数进⾏设置trControl参数,使⽤trGrid参数可以使⽤id函数进⾏设置trGrid参数
例⼦
#定制调整参数
> #trainControl这个函数是为了设置train函数重采样的⽅式,例如这⾥就是使⽤五折交叉验证的⽅法
> trControl <- trainControl(method = 'cv',number = 5,selectionFunction = 'oneSE')
> #id是⽤来设置需要调整的参数及调整的范围,结果⽤在train函数中
> grid <- id(.model='tree',
+                    .trials = c(1,3,5),
+                    .winnow='FALSE')
> set.seed(1234)
>
> m_C502 <- train(Species~., data=iris, method="C5.0",
+                trControl=trControl,
+                tuneGrid=grid)
Warning message:
In Ops.factor(x$winnow) : ‘!’ not meaningful for factors
> m_C502
C5.0
150 samplesbootstrapped
4 predictor
3 classes: 'setosa', 'versicolor', 'virginica'
No pre-processing
Resampling: Cross-Validated (5 fold)
Summary of sample sizes: 120, 120, 120, 120, 120
Resampling results across tuning parameters:
trials  Accuracy  Kappa
1      0.9266667  0.89
3      0.9333333  0.90
5      0.9333333  0.90
Tuning parameter 'model' was held constant at a value of tree
Tuning parameter 'winnow' was held constant at a value of FALSE
Accuracy was used to select the optimal model using  the one SE rule.
The final values used for the model were trials = 1, model = tree and winnow = FALSE.
>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。