mlr案例:回归

原英文地址:https://mlr.mlr-org.com/articles/tutorial/usecase_regression.html

目录

  • 定义任务
  • 调整
  • 基准测试
  • 性能

我们使用著名的mlbench::BostonHousing() 数据集进行回归。

首先,让我们看一下数据:

data(BostonHousing, package = "mlbench")
summary(BostonHousing)
##       crim                zn             indus       chas   
##  Min.   : 0.00632   Min.   :  0.00   Min.   : 0.46   0:471  
##  1st Qu.: 0.08204   1st Qu.:  0.00   1st Qu.: 5.19   1: 35  
##  Median : 0.25651   Median :  0.00   Median : 9.69          
##  Mean   : 3.61352   Mean   : 11.36   Mean   :11.14          
##  3rd Qu.: 3.67708   3rd Qu.: 12.50   3rd Qu.:18.10          
##  Max.   :88.97620   Max.   :100.00   Max.   :27.74          
##       nox               rm             age              dis        
##  Min.   :0.3850   Min.   :3.561   Min.   :  2.90   Min.   : 1.130  
##  1st Qu.:0.4490   1st Qu.:5.886   1st Qu.: 45.02   1st Qu.: 2.100  
##  Median :0.5380   Median :6.208   Median : 77.50   Median : 3.207  
##  Mean   :0.5547   Mean   :6.285   Mean   : 68.57   Mean   : 3.795  
##  3rd Qu.:0.6240   3rd Qu.:6.623   3rd Qu.: 94.08   3rd Qu.: 5.188  
##  Max.   :0.8710   Max.   :8.780   Max.   :100.00   Max.   :12.127  
##       rad              tax           ptratio            b         
##  Min.   : 1.000   Min.   :187.0   Min.   :12.60   Min.   :  0.32  
##  1st Qu.: 4.000   1st Qu.:279.0   1st Qu.:17.40   1st Qu.:375.38  
##  Median : 5.000   Median :330.0   Median :19.05   Median :391.44  
##  Mean   : 9.549   Mean   :408.2   Mean   :18.46   Mean   :356.67  
##  3rd Qu.:24.000   3rd Qu.:666.0   3rd Qu.:20.20   3rd Qu.:396.23  
##  Max.   :24.000   Max.   :711.0   Max.   :22.00   Max.   :396.90  
##      lstat            medv      
##  Min.   : 1.73   Min.   : 5.00  
##  1st Qu.: 6.95   1st Qu.:17.02  
##  Median :11.36   Median :21.20  
##  Mean   :12.65   Mean   :22.53  
##  3rd Qu.:16.95   3rd Qu.:25.00  
##  Max.   :37.97   Max.   :50.00

这个数据集涉及波士顿郊区的房价。用于回归训练的目标向量是medv——是以1000美元为单位的房价中位数值。关于其他13个变量的描述可以通过`mlbench::BostonHousing()获取。

定义一个任务

现在,让我们定义一个回归任务。

# Make a task
regr.task = makeRegrTask(data = BostonHousing, target = "medv")
regr.task
## Supervised task: BostonHousing
## Type: regr
## Target: medv
## Observations: 506
## Features:
##    numerics     factors     ordered functionals 
##          12           1           0           0 
## Missings: FALSE
## Has weights: FALSE
## Has blocking: FALSE
## Has coordinates: FALSE

为了得到一个特征类型的概览,我们打印了regr.task。结果显示数据集中有12个数值变量和1个因子变量。

调整

输入listLearners("regr")我们可以看到可以用于回归任务的学习器有哪些。

存在如此多的学习器,因此我们难以为该任务选择一个最优的,因此我们会选择其中的一些,并且比较它们的结果。这个分析使用经典的线性回归模型(regr.lm)、带径向基核(regr.ksvm)的SVM(kernlab::ksvm())和来自ranger包(ranger::ranger())的随机森林。

为了快速浏览所有学习器特异的可调整参数,你可以使用getLearnerParamSet() 或者他的别名ParamHelpers::getParamSet(),它会列出学习器的超参数和其他属性。

在设定一个基准实验之前,我们可以指定将要调整的超参数。mlr包提供的强大的调整算法,比如iterated F-racing (irace::irace()), CMA Evolution Strategy (cmaes::cma_es()), model-based / Bayesian optimization (mlrMBO::mbo()) and generalized simulated annealing (GenSA::GenSA())。

对每个模型都有一个超参数将会调整,即SVM模型中的参数和随机森林中树的数目。我们先指定这些参数的搜索空间。通过makeTuneControlCMAES(),我们设定调整方法为CMA Evolution Strategy (cmaes::cma_es())。随后我们使用重采样策略中的5折交叉验证,并以均方根误差(rmse)作为优化标准。

set.seed(1234)

# Define a search space for each learner'S parameter
ps_ksvm = makeParamSet(
  makeNumericParam("sigma", lower = -12, upper = 12, trafo = function(x) 2^x)
)

ps_rf = makeParamSet(
  makeIntegerParam("num.trees", lower = 1L, upper = 200L)
)

# Choose a resampling strategy
rdesc = makeResampleDesc("CV", iters = 5L)

# Choose a performance measure
meas = rmse

# Choose a tuning method
ctrl = makeTuneControlCMAES(budget = 100L)

# Make tuning wrappers
tuned.ksvm = makeTuneWrapper(learner = "regr.ksvm", resampling = rdesc, measures = meas,
  par.set = ps_ksvm, control = ctrl, show.info = FALSE)
tuned.rf = makeTuneWrapper(learner = "regr.ranger", resampling = rdesc, measures = meas,
  par.set = ps_rf, control = ctrl, show.info = FALSE)

基准实验

为了指导基准实验,必须选择一个评估方法。我们使用前面设定的重采样策略和性能度量并将其包装为参数传入benchmark()函数。

# Four learners to be compared
lrns = list(makeLearner("regr.lm"), tuned.ksvm, tuned.rf)

# Conduct the benchmark experiment
bmr = benchmark(learners = lrns, tasks = regr.task, resamplings = rdesc, measures = rmse, 
  show.info = FALSE)

性能

现在我们来评估结果:

getBMRAggrPerformances(bmr)
## $BostonHousing
## $BostonHousing$regr.lm
## rmse.test.rmse 
##       4.901218 
## 
## $BostonHousing$regr.ksvm.tuned
## rmse.test.rmse 
##       3.643597 
## 
## $BostonHousing$regr.ranger.tuned
## rmse.test.rmse 
##       3.425189

箱线图显示了RF在这个任务中优于其他学习器。尽管之前进行了调整,但线性和套索回归的基准实验产生了类似但不良的结果。

plotBMRBoxplots(bmr)
3884693-d6dba481b55e8760.png
image

文章有些细节部分我现在也不是很理解,感兴趣的朋友不妨读读原文。

猜你喜欢

转载自blog.csdn.net/weixin_34107739/article/details/87141334