rxLogistic回归:逻辑回归

机器学习逻辑回归

Usage

  rxLogisticRegression(formula = NULL, data, type = c("binary", "multiClass"),
    l2Weight = 1, l1Weight = 1, optTol = 1e-07, memorySize = 20,
    initWtsScale = 0, maxIterations = 2147483647, showTrainingStats = FALSE,
    sgdInitTol = 0, trainThreads = NULL, denseOptimizer = FALSE,
    normalize = "auto", 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 = 1,
    computeContext = rxGetOption("computeContext"),
    ensemble = ensembleControl(), ...)

Arguments

formula

公式如rxFormula所述。 交互术语和 F() 目前不支持微软 ML中的应用。

data

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

type

一个字符串,指定逻辑回归的类型: "binary" 默认二元分类逻辑回归或 "multi" 多项式逻辑回归。

l2Weight

L2 正则化权重。 其值必须大于或等于 0 ,默认值设置为 1

l1Weight

L1 正则化权重。 其值必须大于或等于 0 ,默认值设置为 1

optTol

优化器收敛的阈值。 如果迭代之间的改进小于阈值,算法将停止并返回当前模型。 较小的值较慢,但更准确。 默认值为 1e-07

memorySize

L-BFGS 的内存大小,指定用于下一步计算的过去位置和渐变数。 此优化参数限制用于计算下一步的大小和方向的内存量。 指定较少的内存时,训练速度更快,但准确性较低。 必须大于或等于 1 ,默认值为 20

initWtsScale

设置初始权重直径,指定为初始权重绘制值的范围。 从此范围内随机初始化这些权重。 例如,如果指定d了直径,则权重在两-d/2者之间d/2均匀分布。 默认值为 0,该值指定所有权重都初始化为 0

maxIterations

设置最大迭代数。 完成此数量的步骤后,即使算法未满足收敛条件,该算法也会停止。

showTrainingStats

指定 TRUE 以显示训练数据和定型模型的统计信息;否则为 FALSE。 默认值为 FALSE。 有关模型统计的更多信息,请参见 summary.mlModel

sgdInitTol

设置为大于 0 的数字,以使用随机梯度下降 (ZN) 查找初始参数。 一个非零值集指定用于确定收敛的容差SPD。 默认值指定 0 未使用ZN。

trainThreads

用于训练模型的线程数。 这应设置为计算机上的内核数。 请注意,L-BFGS 多线程尝试将数据集加载到内存中。 如果出现内存不足问题,则设置为trainThreads1关闭多线程。 如果 NULL 线程数量是内部决定的话。 默认值为 NULL

denseOptimizer

如果 TRUE,则强制内部优化向量缩小。 如果 FALSE启用逻辑回归优化器,则会在找到适当的状态时使用稀疏或密集的内部状态。 设置 denseOptimizer 要求 TRUE 内部优化器使用密集的内部状态,这可能有助于缓解垃圾回收器对一些较大问题的负载。

normalize

指定使用的自动规范化类型:

  • "auto":如果需要规范化,则会自动执行。 这是默认选项。
  • "no":不执行规范化。
  • "yes":执行规范化。
  • "warn":如果需要规范化,则会显示警告消息,但不执行规范化。
    规范化将不同的数据范围重新缩放为标准规模。 特征缩放可确保数据点之间的距离成正比,并使各种优化方法(如梯度下降)的聚合速度要快得多。 如果执行规范化, MaxMin 则使用规范化器。 它对区间 [a, b] 的值进行归一化,其中 -1 <= a <= 00 <= b <= 1b - a = 1和 。 此规范化器通过将零映射到零来保留稀疏性。

mlTransforms

指定在训练 NULL 前或不执行变换时对数据执行的 MicrosoftML 转换列表。 参见 featurizeTextcategoricalcategoricalHash,了解支持的变换。 这些变换在任意指定的 R 变换之后执行。 默认值为 NULL

mlTransformVars

指定一个变量名称的字符向量,mlTransformsNULL用于或不使用变量名称。 默认值为 NULL

rowSelection

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

transforms

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

transformObjects

一个命名列表,其中包含可由 <a0/> 和引用的对象。

transformFunc

变量转换函数。 详情请参见rxTransform。

transformVars

转换函数所需的输入数据集变量的字符向量。 详情请参见rxTransform。

transformPackages

一个字符矢量,指定了额外的R包(除在 中 rxGetOption("transformPackages")指定的)将可用并预加载用于变量变换函数。 例如,通过 和 transformFunc 参数在 RevoScaleR 函数transforms中显式定义的函数,或通过其 formularowSelection 参数隐式定义的函数。 transformPackages该参数也可以是 NULL,表示外部没有rxGetOption("transformPackages")包被预加载。

transformEnvir

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

blocksPerRead

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

reportProgress

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

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

verbose

一个整数值,该值指定所需的输出量。 如果在 0计算期间不打印详细输出。 整数值, 1 用于 4 提供不断增加的信息量。

computeContext

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

ensemble

用于集成的控制参数。

...

额外的参数将直接传递给 Microsoft 计算引擎。

详细信息

逻辑回归是一种分类方法,用于预测分类依赖变量的值,从其关系到假定具有逻辑分布的一个或多个独立变量。 如果依赖变量只有两个可能的值(成功/失败),则逻辑回归为二进制值。 如果依赖变量具有两个以上的可能值(给定诊断测试结果的血型),则逻辑回归是多项式的。

用于 rxLogisticRegression 的优化技术是有限的内存 Broyden-Fletcher-Goldfarb-Shanno (L-BFGS)。 L-BFGS 和常规 BFGS 算法都使用准牛顿方法来估算牛顿方法用于计算步骤的公式中的计算密集型 Hessian 矩阵。 但 L-BFGS 近似值仅使用有限的内存来计算下一步方向,以便它特别适用于大量变量的问题。 该 memorySize 参数指定要存储的过去位置和渐变的数量,以便在下一步的计算中使用。

此学习器可以使用弹性网络正则化:L1(套索)和 L2(ridge)正则化的线性组合。 正则化是一种方法,可以通过施加约束来补充数据,防止通过惩罚具有极端系数值的模型来防止过度拟合,从而使问题更具可取性。 这可以通过选择偏差-方差权衡中的最佳复杂性来提高所学模型的通用化。 正则化的工作原理是将与系数值关联的点添加到假设的错误。 具有极端系数值的准确模型将受到更多的惩罚,但具有更保守值的不太准确的模型将受到更少的惩罚。 L1 和 L2 正则化具有不同的效果和用途,在某些方面是互补的。

l1Weight:在处理高维数据时,可应用于稀疏模型。 它拉取一些相对不重要的小权重特征,指向0。

l2Weight:对于不稀疏的数据,最好是。 它会把很大的重量拉向零。

将脊惩罚加到正则化中,可以克服一些套索的弊端
限制。 例如,当预测器数大于样本大小时,它可以提高其预测准确性。 如果 x = l1Weighty = l2Weightax + by = c 则定义正则化术语的线性跨度。 x 和 y 的默认值都是 1。 主动正则化可以通过从模型中排除重要变量来损害预测能力。 因此,为正则化参数选择最佳值对于逻辑回归模型的性能非常重要。

价值

rxLogisticRegression:一个 rxLogisticRegression 带有训练模型的对象。

LogisticReg:Logistic Reg trainer 的学习 maml 者规格对象。

备注

当(多线程处理)时 trainThreads > 1 ,此算法将尝试将整个数据集加载到内存中。

作者 ()

Microsoft公司Microsoft Technical Support

参考文献

Wikipedia: L-BFGS

regression

Training of L1-Regularized Log-Linear Models

and L2 Regularization for Machine Learning

另见

rxFastTrees,rxFastForest,rxFastLinear,rxNeuralNet,rxOneClassSvm,featurizeText,categorical,categoricalHash,rxPredict.mlModel。

示例


 # Estimate a logistic regression model
 logitModel <- rxLogisticRegression(isCase ~ age + parity + education + spontaneous + induced,
                   transforms = list(isCase = case == 1),
                   data = infert)
 # Print a summary of the model
 summary(logitModel)

 # Score to a data frame
 scoreDF <- rxPredict(logitModel, data = infert, 
     extraVarsToWrite = "isCase")

 # Compute and plot the Radio Operator Curve and AUC
 roc1 <- rxRoc(actualVarName = "isCase", predVarNames = "Probability", data = scoreDF) 
 plot(roc1)
 rxAuc(roc1)

 #######################################################################################
 # Multi-class logistic regression  
 testObs <- rnorm(nrow(iris)) > 0
 testIris <- iris[testObs,]
 trainIris <- iris[!testObs,]
 multiLogit <- rxLogisticRegression(
     formula = Species~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
     type = "multiClass", data = trainIris)

 # Score the model
 scoreMultiDF <- rxPredict(multiLogit, data = testIris, 
     extraVarsToWrite = "Species")    
 # Print the first rows of the data frame with scores
 head(scoreMultiDF)
 # Look at confusion matrix
 table(scoreMultiDF$Species, scoreMultiDF$PredictedLabel)

 # Look at the observations with incorrect predictions
 badPrediction = scoreMultiDF$Species != scoreMultiDF$PredictedLabel
 scoreMultiDF[badPrediction,]