rxFastTrees:快速树

机器学习快速树

用法

  rxFastTrees(formula = NULL, data, type = c("binary", "regression"),
    numTrees = 100, numLeaves = 20, learningRate = 0.2, minSplit = 10,
    exampleFraction = 0.7, featureFraction = 1, splitFraction = 1,
    numBins = 255, firstUsePenalty = 0, gainConfLevel = 0,
    unbalancedSets = FALSE, trainThreads = 8, randomSeed = NULL,
    mlTransforms = NULL, mlTransformVars = NULL, rowSelection = NULL,
    transforms = NULL, transformObjects = NULL, transformFunc = NULL,
    transformVars = NULL, transformPackages = NULL, transformEnvir = NULL,
    blocksPerRead = rxGetOption("blocksPerRead"),
    reportProgress = rxGetOption("reportProgress"), verbose = 2,
    computeContext = rxGetOption("computeContext"),
    ensemble = ensembleControl(), ...)

参数

formula

rxFormula 中描述的公式。 MicrosoftML 目前不支持交互项和 F()

data

指定 .xdf 文件或数据帧对象的数据源对象或字符串。

type

指定快速树类型的字符串:"binary" 用于默认快速树二元分类,而 "regression" 用于快速树回归。

numTrees

指定要在系综中创建的决策树总数。 通过创建更多决策树,你可能会获得更好的覆盖范围,但训练时间将会增加。 默认值为 100。

numLeaves

可以在任何树中创建的最大叶(终端节点)数。 较高的值可能会增加树的大小并提供较高的准确性,但存在过度拟合和需要更长训练时间的风险。 默认值为 20。

learningRate

确定在学习过程的每一步中在梯度方向上所采取的步长大小。 这决定了学习器在最佳解决方案上的收敛速度快慢。 如果步幅太大,则可能会越过最优解。 如果步长太小,训练需要较长的时间才能收敛到最佳解决方案。

minSplit

形成叶所需的最小训练实例数。 即回归树的叶中允许的最小文档数(子采样数据中)。 “拆分”意味着对树(节点)的每个级别的特征进行随机划分。 默认值为 10。 即使对实例进行了加权,也只计算实例数。

exampleFraction

每棵树使用的随机选择实例的分数。 默认值为 0.7。

featureFraction

每棵树使用的随机选择特征的分数。 默认值为 1。

splitFraction

每个拆分使用的随机选择特征的分数。 默认值为 1。

numBins

每个特征的最大不同值(箱)数。 如果特征的值少于指示的数量,则每个值都放置在自己的箱中。 如果有更多值,则算法会创建 numBins 个箱。

firstUsePenalty

该特征首先使用惩罚系数。 这是一种正则化形式,在创建树时会因使用新特征而受到惩罚。 增加此值以创建不使用许多特征的树。 默认值为 0。

gainConfLevel

树拟合增益置信度要求(应在 [0,1) 范围内)。 默认值为 0。

unbalancedSets

如果为 TRUE,则使用针对非均衡集优化的导数。 仅当 type 等于 "binary" 时适用。 默认值是 FALSE

trainThreads

训练中使用的线程数。 默认值为 8。

randomSeed

指定随机种子。 默认值是 NULL

mlTransforms

指定在训练前要对数据执行的 MicrosoftML 转换的列表;如果不需要执行任何转换,则指定为 NULL。 有关支持的转换,请参阅 featurizeTextcategoricalcategoricalHash。 这些转换在任何指定的 R 转换之后执行。 默认值是 NULL

mlTransformVars

指定要在 mlTransforms 中使用的变量名称的字符向量;如果不使用任何变量名称,则指定为 NULL。 默认值是 NULL

rowSelection

使用数据集中的逻辑变量名称(带引号)或通过使用数据集中的变量的逻辑表达式指定模型要使用的数据集中的行(观察值)。 例如,rowSelection = "old" 将仅使用变量 old 的值为 TRUE 的观察值。 rowSelection = (age > 20) & (age < 65) & (log(income) > 10) 仅使用 age 变量值介于 20 和 65 之间且 income 变量的 log 值大于 10 的观察值。 在处理任何数据转换之后执行行选择(请参阅参数 transformstransformFunc)。 与所有表达式一样,可以使用表达式函数在函数调用之外定义 rowSelection

transforms

表示第一轮变量转换的窗体 list(name = expression, ``...) 的表达式。 与所有表达式一样,可以使用表达式函数在函数调用之外定义 transforms(或 rowSelection)。

transformObjects

一个命名列表,其中包含可由 transformstransformsFuncrowSelection 引用的对象。

transformFunc

变量转换函数。 有关详细信息,请参阅 rxTransform。

transformVars

转换函数所需的输入数据集变量的字符向量。 有关详细信息,请参阅 rxTransform。

transformPackages

一个字符向量,用于指定将提供和预加载以在变量转换函数中使用的附加 R 包(在 rxGetOption("transformPackages") 中指定的包之外)。 例如,在 RevoScaleR 函数中通过 transformstransformFunc 参数显式定义的那些包,或者通过 formularowSelection 参数隐式定义的包。 transformPackages 参数也可能为 NULL,表示未预加载 rxGetOption("transformPackages") 以外的包。

transformEnvir

用户定义环境,充当内部开发并用于变量数据转换的所有环境的父级。 如果为 transformEnvir = NULL,则改用具有父级 baseenv() 的新“哈希”环境。

blocksPerRead

为从数据源读取的每个数据块指定要读取的块数。

reportProgress

一个整数值,指定行处理进度的报告级别:

  • 0:不报告进度。
  • 1:打印并更新已处理的行数。
  • 2:报告已处理的行数和计时。
  • 3:报告已处理的行数和所有计时。

verbose

一个整数值,指定需要的输出量。 如果为 0,则计算期间不会打印详细输出。 从 14 的整数值表示提供的信息量逐步增加。

computeContext

设置执行计算的上下文,使用有效的 RxComputeContext 指定。 目前支持本地和 RxInSqlServer 计算上下文。

ensemble

控制用于集成的参数。

...

要直接传递到 Microsoft 计算引擎的其他参数。

详细信息

rxFastTrees 是 FastRank 的一个实现。 FastRank 是 MART 梯度提升算法的高效实现。 梯度提升是解决回归问题的一种机器学习技术。 它使用预定义的损失函数测量每个步骤中的误差并在下一个步骤中纠正误差,以步进的方式构建每个回归树。 因此,此预测模型实际上是较弱预测模型的系综。 在回归问题中,提升可采用步进方式构建一系列树,然后选择使用任意可微损失函数的最佳树。

MART 学习回归树的系综,它是一个决策树,其叶中包含标量值。 决策(或回归)树是一种类似于二叉树的流程图,其中在每个内部节点处,根据某个来自输入的特征值决定两个子节点中的哪一个继续。 在每个叶节点处返回一个值。 在内部节点中,决策基于测试 "x <= v",其中 x 是输入样本中该特性的值,v 是该特性的其中一个可能值。 回归树能够生成的函数都是分段式的常量函数。

通过在每个步骤中计算近似损失函数梯度的回归树,并将其添加到具有可将新树损失降至最低的系数的先前树中,从而生成树的系综。 MART 在给定的实例上生成的系综的输出是树输出的总数。

对于二元分类问题,输出通过使用某种形式的校准转换为概率。

对于回归问题,输出是函数的预测值。

对于排名问题,这些实例按系综的输出值排序。

如果 type 设置为 "regression",则使用 FastTree 的回归版本。 如果设置为 "ranking",则使用 FastTree 的排序版本。 在排序情况下,实例应该按照树系综的输出进行排序。 这些版本设置的唯一区别在于校准设置(仅分类需要该设置)。

rxFastTrees:具有已训练模型的 rxFastTrees 对象。

FastTree:快速树训练程序的类 maml 的学习器规范对象。

备注

此算法是多线程的,将始终尝试将整个数据集加载到内存中。

作者

Microsoft Corporation Microsoft Technical Support

参考

Wikipedia: Gradient boosting (Gradient tree boosting)

Greedy function approximation: A gradient boosting machine.

另请参阅

rxFastForestrxFastLinearrxLogisticRegressionrxNeuralNetrxOneClassSvmfeaturizeTextcategoricalcategoricalHashrxPredict.mlModel

示例


 # Estimate a binary classification tree
 infert1 <- infert
 infert1$isCase = (infert1$case == 1)
 treeModel <- rxFastTrees(formula = isCase ~ age + parity + education + spontaneous + induced,
         data = infert1)

 # Create xdf file with per-instance results using rxPredict
 xdfOut <- tempfile(pattern = "scoreOut", fileext = ".xdf")
 scoreDS <- rxPredict(treeModel, data = infert1,
    extraVarsToWrite = c("isCase", "Score"), 
    outData = xdfOut)

 rxDataStep(scoreDS, numRows = 10)

 # Clean-up
 file.remove(xdfOut)

 ######################################################################
 # Estimate a regression fast tree

 # Use the built-in data set 'airquality' to create test and train data
 DF <- airquality[!is.na(airquality$Ozone), ]  
 DF$Ozone <- as.numeric(DF$Ozone)
 randomSplit <- rnorm(nrow(DF))
 trainAir <- DF[randomSplit >= 0,]
 testAir <- DF[randomSplit < 0,]
 airFormula <- Ozone ~ Solar.R + Wind + Temp

 # Regression Fast Tree for train data
 fastTreeReg <- rxFastTrees(airFormula, type = "regression", 
     data = trainAir)  

 # Put score and model variables in data frame
 fastTreeScoreDF <- rxPredict(fastTreeReg, data = testAir, 
     writeModelVars = TRUE)

 # Plot actual versus predicted values with smoothed line
 rxLinePlot(Score ~ Ozone, type = c("p", "smooth"), data = fastTreeScoreDF)