其他分享
首页 > 其他分享> > 拓端tecdat:R语言梯度提升机 GBM、支持向量机SVM、正则判别分析RDA模型训练、参数调优化和性能比较可视化分析声纳数据

拓端tecdat:R语言梯度提升机 GBM、支持向量机SVM、正则判别分析RDA模型训练、参数调优化和性能比较可视化分析声纳数据

作者:互联网

原文链接:http://tecdat.cn/?p=24354

原文出处:拓端数据部落公众号

 本文介绍简化模型构建和评估过程。

caret包的train 函数可用于

首先,必须选择特定的模型。

调整模型的第一步是选择一组要评估的参数。例如,如果拟合偏最小二乘 (PLS) 模型,则必须指定要评估的 PLS 组件的数量。

一旦定义了模型和调整参数值,还应指定重采样的类型。目前,  k折交叉验证(一次或重复)、留一法交叉验证和引导(简单估计或 632 规则)重采样方法可以被 train。重采样后,该过程会生成性能测量的配置文件,可用于指导用户选择应选择哪些调整参数值。默认情况下,该函数会自动选择与最佳值相关的调整参数,尽管可以使用不同的算法。

声纳数据例子

在这里,我们加载数据:

  1.    
  2.   str(Snr[, 1:10])

将数据的分层随机样本创建为训练集和测试集:

  1.    
  2.   iTraing <- creaDaaPatiion(Cls, p = .75, list = FALSE)

我们将使用这些数据说明此(和其他)页面上的功能。

基本参数调优

默认情况下,简单重采样用于上述算法中的第 3 行。还有其他的,如重复 K折交叉验证,留一法等。 指定重采样的类型:

  1.   fit <- trainCnol(## 10-fold CV
  2.   meod = "rpaedcv",
  3.    
  4.   ## 重复10次
  5.   rpets = 10)

前两个参数 train 分别是预测变量和结果数据对象。第三个参数 , method指定模型的类型。为了说明,我们将通过 gbm 包。使用重复交叉验证拟合此模型的基本语法如下所示:

  1.   train(
  2.   mehd = "gbm",

 

对于梯度提升机 (GBM) 模型,有三个主要调整参数:

为该模型测试的默认值显示在前两列中(shrinkage 并且 n.minobsinnode 未显示,因为候选模型的网格集都对这些调整参数使用单个值)。标记为“ Accuracy”的列是交叉验证迭代的平均总体一致率。一致性标准偏差也是从交叉验证结果中计算出来的。“ Kappa”列是 Cohen 的(未加权的)Kappa 统计量在重采样结果中的平均值。 train 适用于特定模型。对于这些模型, train 可以自动创建一个调整参数的网格。默认情况下,如果 p 是调整参数的数量,则网格大小为 3^p。再举一个例子,正则化判别分析 (RDA) 模型有两个参数 (gamma 和 lambda),这两个参数都介于 0 和 1 之间。默认训练网格将在这个二维空间中产生九种组合。

train 下一节将介绍其中的其他功能 。

再现性注意事项

许多模型在估计参数的阶段使用随机数。此外,重采样索引是使用随机数选择的。有两种主要的方法来控制随机性以确保可重复的结果。

自定义调优过程

有几种方法可以自定义选择调整/复杂性参数和构建最终模型的过程。

预处理选项

如前所述,train 可以在模型拟合之前以各种方式对数据进行预处理。该功能 preProcess 是自动使用的。此函数可用于标准、插补(参见下文详细信息)、通过主成分分析或独立成分分析应用空间符号变换和特征提取。

为了指定应该进行什么预处理,该 train 函数有一个名为 的参数 preProcess。 preProcess 函数的附加选项 可以通过trainControl 函数传递 。

这些处理步骤将在使用predict.trainextractPrediction 或 生成的任何预测期间应用 extractProbs (请参阅本文档后面的详细信息)。预处理 不会 应用于直接使用object$finalModel 对象的预测 。

对于插补,目前实现了三种方法:

如果训练集中存在缺失值,PCA 和 ICA 模型仅使用完整样本。

交替调谐网格

调谐参数网格可由用户指定。该参数 tuneGrid 可以采用包含每个调整参数列的数据框。列名应该与拟合函数的参数相同。对于前面提到的 RDA 示例,名称将是 gamma 和 lambda。 train 将在行中的每个值组合上调整模型。

对于提升树模型,我们可以固定学习率并评估三个以上的n.trees值。
 

  1.   expnd.grd(
  2.   n.trees = (1:30)*50,
  3.   )
  4.    
  5.    
  6.   Fit2

 

另一种选择是使用可能的调整参数组合的随机样本,即“随机搜索”。

要使用随机搜索,请使用search = "random" 调用中 的选项 trainControl。在这种情况下, tuneLength 参数定义了将被评估的参数组合的总数。

绘制重采样图像

该 plot 函数可用于检查性能估计与调整参数之间的关系。例如,函数的简单调用显示了第一个性能度量的结果:

tels.pr.st(cretTe())

可以使用该metric 选项显示其他性能指标 :

  1.   trels.r.st(carthme())
  2.   plt(Fit2, meric = "Kap")

 

也可以使用其他类型的绘图。有关?plot.train 更多详细信息,请参阅 。下面的代码显示了结果的热图:

  1.   trlipt(crTme())
  2.   plt(Fit2))

ggplot 还可以使用ggplot方法:

ggplot( Fit2)  

还有一些绘图函数可以更详细地表示重新采样的估计值。有关?xyplot.train 更多详细信息,请参阅 。

从这些图中,可能需要一组不同的调谐参数。要更改最终值而无需再次启动整个过程, update.train 可用于重新拟合最终模型。看 ?update.train

trainControl 功能

该函数 trainControl 生成参数,进一步控制模型的创建方式,可能的值:

替代性能指标

用户可以更改用于确定最佳设置的指标。默认情况下,为回归计算RMSE、  R 2 和平均绝对误差 (MAE),而为分类计算准确度和 Kappa。同样默认情况下,参数值是分别使用 RMSE 和精度选择的,分别用于回归和分类。该 函数的 metric 参数 train允许用户控制使用哪个最优标准。例如,在一类中样本百分比较低的问题中,使用 metric = "Kappa" 可以提高最终模型的质量。

如果这些参数都不令人满意,用户还可以计算自定义性能指标。该 trainControl 函数有一个参数 summaryFunction ,用于指定计算性能的函数。该函数应具有以下参数:

该函数的输出应该是具有非空名称的数字汇总指标的向量。默认情况下, train 根据预测类别评估分类模型。可选地,类概率也可用于衡量性能。要在重采样过程中获得预测的类概率,参数 classProbs in trainControl 必须设置为 TRUE。这将概率列合并到每个重采样生成的预测中(每个类有一列,列名是类名)。

如上一节所示,自定义函数可用于计算重采样的平均性能分数。计算 ROC 曲线下的灵敏度、特异性和面积:

head(toClamary)

要使用此标准重建提升树模型,我们可以使用以下代码查看调整参数与 ROC 曲线下面积之间的关系:

  1.    
  2.    
  3.   Fit3<- tran(C
  4.   mtric = "ROC")

 

在这种情况下,与最佳调整参数相关的 ROC 曲线下的平均面积在 100 次重采样中为 0.922。

选择最终模型

自定义调整过程的另一种方法是修改用于选择“最佳”参数值的算法,给定性能数字。默认情况下,该 train 函数选择具有最大性能值(或最小,对于回归模型中的均方误差)的模型。可以使用其他选择模型的方案。 Breiman et al (1984) 为简单的基于树的模型建议了“一个标准错误规则”。在这种情况下,识别出具有最佳性能值的模型,并使用重采样来估计性能的标准误差。使用的最终模型是(经验上的)最佳模型的一个标准误差范围内的最简单模型。对于简单的树,这是有道理的,因为随着这些模型越来越针对训练数据,它们将开始过度拟合。

train 允许用户指定用于选择最终模型的替代规则。该参数 selectionFunction 可用于提供一个函数来通过算法确定最终模型。包中现有三个函数: best 是选择最大/最小值, oneSE 尝试捕捉精神 Breiman et al (1984) 并 tolerance 在最佳值的某个百分比容差范围内选择最不复杂的模型。

可以使用用户定义的函数,只要它们具有以下参数:

该函数应输出一个整数,指示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% 的性能损失选择参数值:

  1.   tolrae(rslts, merc = "ROC",
  2.   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")

探索和比较重采样分布

模型内

例如,以下语句创建一个密度图:

  1.   tlisaret(crtTe())
  2.   deiplt(Ft3, pch = "|")

请注意,如果您有兴趣绘制多个调整参数的重采样结果,resamples = "all" 则应在控制对象中使用该选项 。

模型间

表征模型之间的差异(使用产生的 train, sbf 或 rfe通过它们的重新采样分布)。

首先,支持向量机模型拟合声纳数据。使用preProc 参数对数据进行标准化 。请注意,相同的随机数种子设置在与用于提升树模型的种子相同的模型之前。

  1.   set.sed(25)
  2.   Ft <- tran(
  3.   preProc = c("center", "scale"),
  4.    
  5.   metric = "ROC")

此外,还拟合了正则化判别分析模型。

  1.   Fit <- tn(
  2.   method = "rda")

鉴于这些模型,我们能否对它们的性能差异做出统计陈述?为此,我们首先使用 收集重采样结果 。

rsa <- resamples()

summary

有几种点阵图方法可用于可视化重采样分布:密度图、盒须图、散点图矩阵和汇总统计的散点图。例如:

  1.   the <- elia.get(
  2.   ptsyol$col = rb(.2, ., .2, .4)
  3.   plot(resamp, layot = c(3, 1))

由于模型是在相同版本的训练数据上拟合的,对模型之间的差异进行推断是有意义的。通过这种方式,我们减少了可能存在的样本内相关性。我们可以计算差异,然后使用一个简单的t检验来评估模型之间没有差异的无效假设。
 

diValu

summary

plot(diVls, lyu = c(3, 1))

plot(fVue)

没有参数调整的拟合模型

在模型调整值已知的情况下, train 可用于将模型拟合到整个训练集,无需任何重采样或参数调整。可以使用 using method = "none" 选项 trainControl 。例如:

  1.   tronol(mtd = "none", csPrs = TRUE)
  2.   Fit4

请注意 plot.train,  resamplesconfusionMatrix.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.

python中用pytorch机器学习分类预测银行客户流失

标签:采样,函数,模型,GBM,判别分析,tecdat,train,参数,使用
来源: https://www.cnblogs.com/tecdat/p/15698983.html