R语言机器学习之caret包详解(二:模型的训练以及调参)

R语言机器学习之caret包详解(二:模型的训练以及调参)

前言

在之前的博客中我们详细介绍过了数据的拆分策略、各种数据处理的方法、各种交叉验证的方法,并且以示例介绍了R函数createDataPartition、trainControl

caret包模型调优的策略、示例、以及一些小tips

下面我们来介绍模型的训练以及调参。以下图片是caret包模型调优的策略。

在这里插入图片描述
我们该如何理解上面的图片?下面我们举一个例子来说明。
我们使用caret包来对k近邻方法进行调参,数据选用的鸢尾花数据集!

> data(iris)
> TrainData <- iris[,1:4]
> TrainClasses <- iris[,5]
> 
> knnFit1 <- train(TrainData, TrainClasses,
+                  method = "knn",
+                  preProcess = c("center", "scale"),
+                  tuneGrid = expand.grid(k = c(2,5,8)),
+                  trControl = trainControl(method = "cv"))
> 

对于我所选择的method = “knn”其调优参数只有k,我们指定的调优参数k2、5、8,针对每类调优参数train函数会在训练集的基础上进行十折交叉验证(默认情况下)。以下是各类调优参数在十折交叉验证下的结果!

> results
  k  Accuracy Kappa AccuracySD    KappaSD
1 2 0.9400000  0.91 0.07336700 0.11005049
2 5 0.9400000  0.91 0.05837300 0.08755950
3 8 0.9466667  0.92 0.05258738 0.07888106

results:其中的Accuracy Kappa都是在十次结果的基础上取的平均值(十折交叉验证)!
当然对于调优参数很多的,它会按照全排列形成一系列的组合!
在这里插入图片描述
在这里我们使用kknn包实现k近邻算法。

> knnFit2 <- train(TrainData, TrainClasses,
+                  method = "kknn",
+                  preProcess = c("center", "scale"),
+                  tuneGrid = expand.grid(kmax = c(2, 5, 8), distance = c(1,2),
+                                          kernel = 'optimal'),
+                  trControl = trainControl(method = "cv"))

> results
  kmax distance  kernel  Accuracy Kappa AccuracySD    KappaSD
1    2        1 optimal 0.9333333  0.90 0.07027284 0.10540926
2    2        2 optimal 0.9466667  0.92 0.05258738 0.07888106
3    5        1 optimal 0.9533333  0.93 0.05488484 0.08232726
4    5        2 optimal 0.9466667  0.92 0.05258738 0.07888106
5    8        1 optimal 0.9533333  0.93 0.05488484 0.08232726
6    8        2 optimal 0.9466667  0.92 0.05258738 0.07888106

一些小的tips

tips:函数set.seed用在train函数之前有一些作用:它可以保证我们使用相同的数据进行交叉验证(保证两个模型使用相同的重抽样信息),从而更好的决定调优参数,我举例来说明!

fitControl <- trainControl(## 10-fold CV
                           method = "repeatedcv",
                           number = 10,
                           ## repeated ten times
                           repeats = 10)
set.seed(825)
gbmFit1 <- train(Class ~ ., data = training, 
                 method = "gbm", 
                 trControl = fitControl,
                 ## This last option is actually one
                 ## for gbm() that passes through
                 verbose = FALSE)

gbmGrid <-  expand.grid(interaction.depth = c(1, 5, 9), 
                        n.trees = (1:30)*50, 
                        shrinkage = 0.1,
                        n.minobsinnode = 20)


set.seed(825)

gbmFit2 <- train(Class ~ ., data = training,
                 method = 'gbm',
                 trControl = fitControl,
                 tuneGrid = gbmGrid,
                 verbose = FALSE)



index1 = gbmFit1$control$index
index2 = gbmFit2$control$index
> identical(index1, index2)
[1] TRUE

由于set.seed函数的设置,以上代码gbmFit1、gbmFit2中交叉验证重抽样的信息相同!

一些小tips

metric:回归问题中通常使用RMSE R方 MAE作为衡量模型效果的指标;分类问题中通常使用Accuracy Kappa作为衡量模型效果的指标。如果在某些问题下,以上指标不能满足caret也提供了许多函数defaultSummary,这里不一一介绍!

一些小tips

caret包主要是进行机器学习方法调参,那么可不可以直接使用某些参数拟合模型,直接跳过调参?答案当然是可以的!请看以下代码!

> fitControl = trainControl(method = 'none', classProbs = TRUE)
> set.seed(123)
> gbmFit4 = train(Class ~ ., data = training, 
+                 method = 'gbm',
+                 trControl = fitControl,
+                 verbose = FALSE,
+                 tuneGrid = data.frame(
+                         interaction.depth = 4,
+                         n.trees = 100,
+                         shrinkage = .1,
+                         n.minobsinnode = 20),
+                 metric = 'ROC')
> gbmFit4
Stochastic Gradient Boosting 

157 samples
 60 predictor
  2 classes: 'M', 'R' 

No pre-processing
Resampling: None 
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
r语言caret是一个非常强大和全面的机器学习工具,提供了许多常见的模型和算法。然而,也有一些模型caret中并不含。以下是一些caret中不含的模型: 1. 非线性模型caret含一些线性模型,如线性回归和逻辑回归,但不括非线性模型,如多项式回归、支持向量回归和神经网络模型等。对于这些非线性模型,可以考虑使用其他R,如nnet、kernlab或neuralnet。 2. 深度学习模型:目前,caret中还没有内置的深度学习模型。由于深度学习模型通常需要大量的计算资源和数据,因此在R语言中,可以考虑使用其他专门的深度学习框架,如Keras、TensorFlow或PyTorch等。 3. 时间序列模型caret中并不含用于时间序列预测的模型,如ARIMA或GARCH等。对于时间序列建模,可以使用其他专门的R,如forecast或tseries等。 4. 强化学习模型:强化学习模型是一类特殊的机器学习模型,它通过与环境的交互来学习最优的决策策略。目前,caret中还没有内置的强化学习模型。如果需要使用强化学习模型,可以考虑使用Python中的强化学习库,如OpenAI Gym或Stable-Baselines等。 需要注意的是,虽然caret中可能不含所有的模型,但它提供了许多功能强大的模型和算法,可以满足大部分的机器学习任务需求。如果caret中没有你需要的模型,你可以考虑使用其他适合的R或者其他编程语言的机器学习工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卑微的小垃圾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值