共计 7455 个字符,预计需要花费 19 分钟才能阅读完成。
原文链接:http://tecdat.cn/?p=24354
本文介绍简化模型构建和评估过程。
caret 包的 train
函数可用于
- 应用重采样评估模型调整参数对性能的影响
- 在这些参数中抉择“最佳”模型
- 从训练集预计模型性能
首先,必须抉择特定的模型。
调整模型的第一步是抉择一组要评估的参数。例如,如果拟合偏最小二乘 (PLS) 模型,则必须指定要评估的 PLS 组件的数量。
一旦定义了模型和调整参数值,还应指定重采样的类型。目前,_k_折穿插验证(一次或反复)、留一法穿插验证和疏导(简略预计或 632 规定)重采样办法能够被 train
。重采样后,该过程会生成性能测量的配置文件,可用于领导用户抉择应抉择哪些调整参数值。默认状况下,该函数会主动抉择与最佳值相干的调整参数,只管能够应用不同的算法。
声纳数据例子
在这里,咱们加载数据:
str(Snr\[, 1:10\])
将数据的分层随机样本创立为训练集和测试集:
iTraing <- creaDaaPatiion(Cls, p = .75, list = FALSE)
咱们将应用这些数据阐明此(和其余)页面上的性能。
基本参数调优
默认状况下,简略重采样用于上述算法中的第 3 行。还有其余的,如反复 _K_折穿插验证,留一法等。指定重采样的类型:
fit <- trainCnol(## 10-fold CV
meod = "rpaedcv",
## 反复 10 次
rpets = 10)
前两个参数 train
别离是预测变量和后果数据对象。第三个参数,method
指定模型的类型。为了阐明,咱们将通过 gbm 包。应用反复穿插验证拟合此模型的根本语法如下所示:
train(mehd = "gbm",
对于梯度提升机 (GBM) 模型,有三个次要调整参数:
- 迭代次数,即树,(
n.trees
在gbm
函数中调用) - 树的复杂度,称为
interaction.depth
- 学习率:算法适应的速度,称为
shrinkage
- 节点中开始决裂的最小训练集样本数 (
n.minobsinnode
)
为该模型测试的默认值显示在前两列中(shrinkage
并且 n.minobsinnode
未显示,因为候选模型的网格集都对这些调整参数应用单个值)。标记为“Accuracy
”的列是穿插验证迭代的均匀总体统一率。一致性标准偏差也是从穿插验证后果中计算出来的。“Kappa
”列是 Cohen 的(未加权的)Kappa 统计量在重采样后果中的平均值。train
实用于特定模型。对于这些模型,train
能够主动创立一个调整参数的网格。默认状况下,如果 _p_ 是调整参数的数量,则网格大小为 _3^p_。再举一个例子,正则化判别分析 (RDA) 模型有两个参数 (gamma
和 lambda
),这两个参数都介于 0 和 1 之间。默认训练网格将在这个二维空间中产生九种组合。
train
下一节将介绍其中的其余性能。
再现性注意事项
许多模型在预计参数的阶段应用随机数。此外,重采样索引是应用随机数抉择的。有两种次要的办法来管制随机性以确保可反复的后果。
- 有两种办法能够确保在调用训练时应用雷同的重样本。第一种是在调用训练前应用 set.seed。第一次应用随机数是为了创立重采样信息。另外,如果你想应用数据的特定宰割,能够应用 trainControl 函数的索引参数。
- 当模型在重采样中被创立时,种子也能够被设置。尽管在调用 train 之前设置种子能够保障应用雷同的随机数,但在应用并行处理时不太可能是这种状况(取决于利用的是哪种技术)。为了设置模型拟合的种子,trainControl 有一个额定的参数叫种子,能够应用。这个参数的值是一个作为种子的整数向量的列表。trainControl 的帮忙页面形容了这个选项的适当格局。
自定义调优过程
有几种办法能够自定义抉择调整 / 复杂性参数和构建最终模型的过程。
预处理选项
如前所述,train
能够在模型拟合之前以各种形式对数据进行预处理。该性能 preProcess
是主动应用的。此函数可用于规范、插补(参见下文详细信息)、通过主成分剖析或独立成分剖析利用空间符号变换和特征提取。
为了指定应该进行什么预处理,该 train
函数有一个名为 的参数 preProcess
。preProcess
函数的附加选项 能够通过trainControl
函数传递。
这些解决步骤将在应用 predict.train
, extractPrediction
或 生成的任何预测期间利用 extractProbs
(请参阅本文档前面的详细信息)。预处理 不会 利用于间接应用object$finalModel
对象的预测。
对于插补,目前实现了三种办法:
- _k -_最近邻采纳具备缺失值的样本,并 在训练集中找到 _k 个_最靠近的样本。该 预测器的_k 个_训练集值的平均值 用作原始数据的代替。在计算到训练集样本的间隔时,计算中应用的预测变量是该样本没有缺失值且训练集中没有缺失值的预测变量。
- 另一种办法是应用训练集样本为每个预测因子拟合一个袋状树模型。这通常是一个相当精确的模型,能够解决缺失值。当一个样本的预测器须要估算时,其余预测器的值会通过袋装树进行反馈,并将预测值作为新值。这个模型会有很大的计算成本。
- 预测器训练集值的中位数可用于预计缺失数据。
如果训练集中存在缺失值,PCA 和 ICA 模型仅应用残缺样本。
交替调谐网格
调谐参数网格可由用户指定。该参数 tuneGrid
能够采纳蕴含每个调整参数列的数据框。列名应该与拟合函数的参数雷同。对于后面提到的 RDA 示例,名称将是 gamma
和 lambda
。train
将在行中的每个值组合上调整模型。
对于晋升树模型,咱们能够固定学习率并评估三个以上的 n.trees 值。
expnd.grd(n.trees = (1:30)*50,
)
Fit2
另一种抉择是应用可能的调整参数组合的随机样本,即“随机搜寻”。
要应用随机搜寻,请应用search = "random"
调用中 的选项 trainControl
。在这种状况下,tuneLength
参数定义了将被评估的参数组合的总数。
绘制重采样图像
该 plot
函数可用于查看性能预计与调整参数之间的关系。例如,函数的简略调用显示了第一个性能度量的后果:
tels.pr.st(cretTe())
能够应用该metric
选项显示其余性能指标:
trels.r.st(carthme())
plt(Fit2, meric = "Kap")
也能够应用其余类型的绘图。无关?plot.train
更多详细信息,请参阅。上面的代码显示了后果的热图:
trlipt(crTme())
plt(Fit2))
ggplot
还能够应用 ggplot
办法:
ggplot(Fit2)
还有一些绘图函数能够更具体地示意从新采样的估计值。无关?xyplot.train
更多详细信息,请参阅。
从这些图中,可能须要一组不同的调谐参数。要更改最终值而无需再次启动整个过程,update.train
可用于从新拟合最终模型。看 ?update.train
trainControl
性能
该函数 trainControl
生成参数,进一步管制模型的创立形式,可能的值:
办法。从新取样的办法。"boot"、"cv"、"LOOCV"、"LGOCV"、"recomplatedcv"、"timeslice"、"none" 和 "oob"。最初一个值,袋外估计值,只能由随机森林、袋装树、袋装地球、袋装灵便判别分析或条件树森林模型应用。GBM 模型不包含在内。另外,对于留一法穿插验证,没有给出重采样性能指标的不确定性预计。
number
和repeats
:number
管制_K_折穿插验证中的折叠 次数或用于疏导和来到组穿插验证的重采样迭代次数。repeats
仅实用于反复的 _K_折穿插验证。假如method = "repeatedcv"
,number = 10
和repeats = 3
, 那么三个独自的 10 折穿插验证被用作重采样计划。verboseIter
:输入训练日志。returnData
: 将数据保留到名为trainingData。
代替性能指标
用户能够更改用于确定最佳设置的指标。默认状况下,为回归计算 RMSE、_R_ 2 和均匀绝对误差 (MAE),而为分类计算准确度和 Kappa。同样默认状况下,参数值是别离应用 RMSE 和精度抉择的,别离用于回归和分类。该 函数的 metric
参数 train
容许用户管制应用哪个最优规范。例如,在一类中样本百分比较低的问题中,应用 metric = "Kappa"
能够进步最终模型的品质。
如果这些参数都不令人满意,用户还能够计算自定义性能指标。该 trainControl
函数有一个参数 summaryFunction
,用于指定计算性能的函数。该函数应具备以下参数:
- data 是一个数据框或矩阵的参考,其列名为 obs 和 pred,用于察看和预测后果值(用于回归的数字数据或用于分类的字符值)。目前,类的概率没有被传递给函数。data 中的值是对繁多调谐参数组合的保留预测值(及其相干参考值)。如果 trainControl 对象的 classProbs 参数被设置为 “true”,数据中就会呈现蕴含类概率的额定列。这些列的名称与类的级别雷同。另外,如果在调用训练时指定了权重,那么数据集中也会有一列叫做权重的数据。
lev
是一个字符串,它具备从训练数据中提取的后果因子级别。对于回归,将 的值NULL
传递到函数中。model
是正在应用的模型的字符串(即传递给 的method
参数 的值train
)。
该函数的输入应该是具备非空名称的数字汇总指标的向量。默认状况下,train
依据预测类别评估分类模型。可选地,类概率也可用于掂量性能。要在重采样过程中取得预测的类概率,参数 classProbs
in trainControl
必须设置为 TRUE
。这将概率列合并到每个重采样生成的预测中(每个类有一列,列名是类名)。
如上一节所示,自定义函数可用于计算重采样的均匀性能分数。计算 ROC 曲线下的灵敏度、特异性和面积:
head(toClamary)
要应用此规范重建晋升树模型,咱们能够应用以下代码查看调整参数与 ROC 曲线下面积之间的关系:
Fit3<- tran(C
mtric = "ROC")
在这种状况下,与最佳调整参数相干的 ROC 曲线下的均匀面积在 100 次重采样中为 0.922。
抉择最终模型
自定义调整过程的另一种办法是批改用于抉择“最佳”参数值的算法,给定性能数字。默认状况下,该 train
函数抉择具备最大性能值(或最小,对于回归模型中的均方误差)的模型。能够应用其余抉择模型的计划。Breiman et al (1984)”) 为简略的基于树的模型倡议了“一个规范谬误规定”。在这种状况下,辨认出具备最佳性能值的模型,并应用重采样来预计性能的标准误差。应用的最终模型是(教训上的)最佳模型的一个标准误差范畴内的最简略模型。对于简略的树,这是有情理的,因为随着这些模型越来越针对训练数据,它们将开始适度拟合。
train
容许用户指定用于抉择最终模型的代替规定。该参数 selectionFunction
可用于提供一个函数来通过算法确定最终模型。包中现有三个函数:best
是抉择最大 / 最小值,oneSE
尝试捕获精力 Breiman et al (1984)”) 并 tolerance
在最佳值的某个百分比容差范畴内抉择最不简单的模型。
能够应用用户定义的函数,只有它们具备以下参数:
x
是一个蕴含调整参数及其相干性能指标的数据框。每行对应一个不同的调整参数组合。metric
批示哪些性能度量应该被优化的字符串(这在间接从传递metric
的自变量train
。maximize
是一个繁多的逻辑值,批示性能指标的较大值是否更好(这也间接从调用传递到train
)。
该函数应输入一个整数,批示x
抉择了哪一行。
举个例子,如果咱们依据整体精度抉择之前的 boosted 树模型,咱们会抉择:n.trees = 1450,interaction.depth = 5,shrinkage = 0.1,n.minobsinnode = 20。该图相当紧凑,准确度值从 0.863 到 0.922 不等。一个不太简单的模型(例如更少、更浅的树)也可能产生可承受的准确性。
容差函数可用于基于 (_x_ – _x_ best)/ _x_ bestx 100(百分比差别)找到不太简单的模型。例如,要依据 2% 的性能损失抉择参数值:
tolrae(rslts, merc = "ROC",
tol = 2, mxiie = TRUE)
resul\[whTwc,1:6\]
这表明咱们能够失去一个不太简单的模型,其 ROC 曲线下的面积为 0.914(与“抉择最佳”值 0.922 相比)。
这些函数的次要问题与从最简略到简单的模型排序无关。在某些状况下,这很容易(例如简略的树、偏最小二乘法),但在这种模型的状况下,模型的排序是主观的。例如,应用 100 次迭代且树深度为 2 的晋升树模型是否比应用 50 次迭代且深度为 8 的模型更简单?该包做出了一些抉择。在晋升树的状况下,该包假如减少迭代次数比减少树深度更快地减少复杂性,因而模型按迭代次数排序,而后按深度排序。
提取预测和类别概率
如前所述,由训练函数产生的对象在 finalModel 子对象中蕴含 “ 优化 “ 的模型。能够像平常一样从这些对象中进行预测。在某些状况下,比方 pls 或 gbm 对象,可能须要指定来自优化后拟合的额定参数。在这些状况下,训练对象应用参数优化的后果来预测新的样本。例如,如果应用 predict.gbm 创立预测,用户必须间接指定树的数量(没有默认)。另外,对于二元分类,该函数的预测采取的是其中一个类的概率模式,所以须要额定的步骤将其转换为因子向量。predict.train 主动解决这些细节(以及其余模型)。
此外,R 中模型预测的规范语法很少。例如,为了取得类概率,许多 predict
办法都有一个称为参数的参数 type
,用于指定是否应该生成类或概率。不同的包应用不同的值 type
,例如 "prob"
,"posterior"
,"response"
,"probability"
或 "raw"
。在其余状况下,应用齐全不同的语法。
对于 predict.train,类型选项被标准化为 “class “ 和 “prob”。比如说。
prdit(it3, nwta = hadetn))
prdit(Ft3, ewata = hed(ttig), tye = "pob")
摸索和比拟重采样散布
模型内
例如,以下语句创立一个密度图:
tlisaret(crtTe())
deiplt(Ft3, pch = "|")
请留神,如果您有趣味绘制多个调整参数的重采样后果,resamples = "all"
则应在管制对象中应用该选项。
模型间
表征模型之间的差别(应用产生的 train
,sbf
或 rfe
通过它们的从新采样散布)。
首先,反对向量机模型拟合声纳数据。应用preProc
参数对数据进行标准化。请留神,雷同的随机数种子设置在与用于晋升树模型的种子雷同的模型之前。
set.sed(25)
Ft <- tran(preProc = c("center", "scale"),
metric = "ROC")
此外,还拟合了正则化判别分析模型。
Fit <- tn(method = "rda")
鉴于这些模型,咱们是否对它们的性能差别做出统计陈说?为此,咱们首先应用 收集重采样后果。
rsa <- resamples()
summary
有几种点阵图办法可用于可视化重采样散布:密度图、盒须图、散点图矩阵和汇总统计的散点图。例如:
the <- elia.get(ptsyol$col = rb(.2, ., .2, .4)
plot(resamp, layot = c(3, 1))
因为模型是在雷同版本的训练数据上拟合的,对模型之间的差别进行推断是有意义的。通过这种形式,咱们缩小了可能存在的样本内相关性。咱们能够计算差别,而后应用一个简略的 t 测验来评估模型之间没有差别的无效假设。
diValu
summary
plot(diVls, lyu = c(3, 1))
plot(fVue)
没有参数调整的拟合模型
在模型调整值已知的状况下,train
可用于将模型拟合到整个训练集,无需任何重采样或参数调整。能够应用 using method = "none"
选项 trainControl
。例如:
tronol(mtd = "none", csPrs = TRUE)
Fit4
请留神 plot.train
,resamples
, confusionMatrix.train
和其余几个函数不适用于此对象,但其余函数 predict.train
将:
prdct(Fit4, newdata)
prdit(Fit4, newdata , tpe = "prb")
最受欢迎的见解
1. 从决策树模型看员工为什么到职
2.R 语言基于树的办法:决策树,随机森林
3.python 中应用 scikit-learn 和 pandas 决策树
4.机器学习:在 SAS 中运行随机森林数据分析报告
5.R 语言用随机森林和文本开掘进步航空公司客户满意度
6. 机器学习助推快时尚精准销售工夫序列
7. 用机器学习辨认一直变动的股市情况——隐马尔可夫模型的利用
8.python 机器学习:举荐零碎实现(以矩阵合成来协同过滤)
9.