caret包介绍学习之train函数介绍

caret包在机器学习会经常用到,它可以进行:数据预处理,特征选择,建模与参数优化,模型预测与检验。关于caret包在这些方面的应用可以参看文章:
R语言之-caret包应用
R语言caret包的学习(四)–建立模型及验证
R中模型性能的提升

本次介绍的是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”, “LGOCV” (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参数可以使用expand.grid函数进行设置trGrid参数

例子

#定制调整参数
> #trainControl这个函数是为了设置train函数重采样的方式,例如这里就是使用五折交叉验证的方法
> trControl <- trainControl(method = 'cv',number = 5,selectionFunction = 'oneSE')
> #expand.grid是用来设置需要调整的参数及调整的范围,结果用在train函数中
> grid <- expand.grid(.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 samples
  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.
> 
R语言中,使用train函数调整knn模型的核函数和带宽是通过设置相应的参数来实现的。train函数caret中的一个功能强大的函数,用于训练和调整模型。 对于knn模型的核函数train函数使用的默认核函数是“rectangular”,代表的是矩形核函数。若想调整为其他核函数,可以通过设置trainControl函数中的参数kernel来实现。trainControl函数用于定义训练控制参数,可以设置的参数括kernel、kappa、classProbs等。具体使用方法如下: ```R # 载入caret library(caret) # 创建训练控制对象 ctrl <- trainControl(method = "knn", # 设置使用的模型 kernel = "triangular") # 设置核函数为三角形核函数 # 使用train函数训练模型 model <- train(x, y, method = "knn", trControl = ctrl) ``` 以上代码中,将训练控制对象ctrl的kernel参数设为"triangular",表示使用三角形核函数进行训练。 对于knn模型的带宽,knn模型中没有严格意义上的带宽,带宽通常在核函数中有所体现,例如Gaussian核函数中的带宽就是一个重要的参数。设置带宽的具体方式取决于使用的核函数,可以通过设置trainControl函数中的参数来实现。例如,对于Gaussian核函数,可以设置核函数中的sigma参数来调整带宽。 ```R # 创建训练控制对象 ctrl <- trainControl(method = "knn", # 设置使用的模型 sigma = 0.5) # 设置Gaussian核函数的带宽为0.5 # 使用train函数训练模型 model <- train(x, y, method = "knn", trControl = ctrl) ``` 以上代码中,将训练控制对象ctrl的sigma参数设为0.5,表示设置Gaussian核函数的带宽为0.5。 需要注意的是,train函数是一个非常灵活和强大的函数,可以通过设置trainControl函数的不同参数来灵活调整knn模型的核函数和带宽,根据实际需求进行调整。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值