microsoftml.rx_logistic_regression:逻辑回归

Usage

microsoftml.rx_logistic_regression(formula: str,
    data: [revoscalepy.datasource.RxDataSource.RxDataSource,
    pandas.core.frame.DataFrame], method: ['binary',
    'multiClass'] = 'binary', l2_weight: float = 1,
    l1_weight: float = 1, opt_tol: float = 1e-07,
    memory_size: int = 20, init_wts_diameter: float = 0,
    max_iterations: int = 2147483647,
    show_training_stats: bool = False, sgd_init_tol: float = 0,
    train_threads: int = None, dense_optimizer: bool = False,
    normalize: ['No', 'Warn', 'Auto', 'Yes'] = 'Auto',
    ml_transforms: list = None, ml_transform_vars: list = None,
    row_selection: str = None, transforms: dict = None,
    transform_objects: dict = None, transform_function: str = None,
    transform_variables: list = None,
    transform_packages: list = None,
    transform_environment: dict = None, blocks_per_read: int = None,
    report_progress: int = None, verbose: int = 1,
    ensemble: microsoftml.modules.ensemble.EnsembleControl = None,
    compute_context: revoscalepy.computecontext.RxComputeContext.RxComputeContext = None)

Description

机器学习逻辑回归

详细信息

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

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

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

  • l1_weight:在处理高维数据时,可应用于稀疏模型。 它会拉取相对不重要的小权重相关特征,这些特征相对不重要。

  • l2_weight:对于不稀疏的数据,最好是。 它将大权重拉到零。

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

Arguments

公式

revoscalepy.rx_formula交互术语 F() 中所述的公式,目前在 microsoftml 中不受支持。

数据

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

方法

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

l2_weight

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

l1_weight

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

opt_tol

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

memory_size

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

max_iterations

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

show_training_stats

指定 True 以显示训练数据和定型模型的统计信息;否则为 False。 默认值为 False。 有关模型统计信息的其他信息,请参阅 summary.ml_model()

sgd_init_tol

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

init_wts_diameter

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

train_threads

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

dense_optimizer

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

规范

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

  • "Auto":如果需要规范化,则会自动执行。 这是默认选项。

  • "No":不执行规范化。

  • "Yes":执行规范化。

  • "Warn":如果需要规范化,则会显示警告消息,但不执行规范化。

规范化将不同的数据范围重新缩放为标准规模。 特征缩放可确保数据点之间的距离成正比,并使各种优化方法(如梯度下降)的聚合速度要快得多。 如果执行规范化, MaxMin 则使用规范化器。 它以间隔 [a, b] 将值规范化,其中 -1 <= a <= 00 <= b <= 1b - a = 1。 此规范化器通过将零映射到零来保留稀疏性。

ml_transforms

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

ml_transform_vars

指定要用于 ml_transforms 变量名称的字符向量;如果未使用,则为 None 。 默认值为 None

row_selection

不支持。 指定数据集中的行(观察值),这些行(观察值)由模型使用数据集(以引号为单位)中的逻辑变量的名称,或使用数据集中的变量的逻辑表达式。 例如:

  • row_selection = "old" 将仅使用变量 old 值所在的 True观察值。

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10)仅使用变量值age介于 20 和 65 之间的观察值,而变量的值logincome大于 10。

在处理任何数据转换后执行行选择(请参阅参数 transformstransform_function)。 与所有表达式一样, row_selection 可以使用函数在函数调用 expression 外部定义。

变换

不支持。 表示第一轮变量转换的窗体的表达式。 与所有表达式一样, transforms 可以使用函数在函数调用expression外部定义(或row_selection)。

transform_objects

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

transform_function

变量转换函数。

transform_variables

转换函数所需的输入数据集变量的字符向量。

transform_packages

不支持。 一个字符向量,用于指定其他 Python 包(在指定 RxOptions.get_option("transform_packages")包之外)可供使用并预加载,以便在变量转换函数中使用。 例如,在 revoscalepy 函数中显式定义的函数通过参数transformstransform_function参数或通过参数formularow_selection隐式定义这些函数。 该 transform_packages 参数也可能为 None,指示未预加载外部 RxOptions.get_option("transform_packages") 的包。

transform_environment

不支持。 用户定义的环境,充当内部开发的所有环境的父环境,用于变量数据转换。 如果是 transform_environment = None,则改用具有父 revoscalepy.baseenv 的新“哈希”环境。

blocks_per_read

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

report_progress

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

  • 0:未报告任何进度。

  • 1:打印和更新已处理的行数。

  • 2:已处理行和计时报告。

  • 3:已处理行并报告所有计时。

详细的

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

compute_context

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

集成

用于集成的控制参数。

退货

具有 LogisticRegression 已训练模型的对象。

注释

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

另请参阅

rx_predict

References

维基百科:L-BFGS

维基百科:逻辑回归

可缩放的 L1-Regularized Log-Linear 模型训练

测试运行 - 机器学习的 L1 和 L2 正则化

二元分类示例

'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_logistic_regression, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

infert = get_dataset("infert")


import sklearn
if sklearn.__version__ < "0.18":
    from sklearn.cross_validation import train_test_split
else:
    from sklearn.model_selection import train_test_split

infertdf = infert.as_df()
infertdf["isCase"] = infertdf.case == 1
data_train, data_test, y_train, y_test = train_test_split(infertdf, infertdf.isCase)

model = rx_logistic_regression(
    formula=" isCase ~ age + parity + education + spontaneous + induced ",
    data=data_train)

print(model.coef_)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
                     extra_vars_to_write=["isCase", "Score"])
                     
# Print the first five rows
print(rx_data_step(score_ds, number_rows_read=5))

输出:

Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
LBFGS multi-threading will attempt to load dataset into memory. In case of out-of-memory issues, turn off multi-threading by setting trainThreads to 1.
Beginning optimization
num vars: 6
improvement criterion: Mean Improvement
L1 regularization selected 5 of 6 weights.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0646405
Elapsed time: 00:00:00.0083991
OrderedDict([('(Bias)', -1.2366217374801636), ('spontaneous', 1.9391206502914429), ('induced', 0.7497404217720032), ('parity', -0.31517016887664795), ('age', -3.162723260174971e-06)])
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0287290
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: 0.001 seconds 
  isCase PredictedLabel     Score  Probability
0  False          False -1.341681     0.207234
1   True           True  0.597440     0.645070
2  False           True  0.544912     0.632954
3  False          False -1.289152     0.215996
4  False          False -1.019339     0.265156

MultiClass 分类示例

'''
MultiClass Classification
'''
import numpy
import pandas
from microsoftml import rx_logistic_regression, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

iris = get_dataset("iris")

import sklearn
if sklearn.__version__ < "0.18":
    from sklearn.cross_validation import train_test_split
else:
    from sklearn.model_selection import train_test_split

irisdf = iris.as_df()
irisdf["Species"] = irisdf["Species"].astype("category")
data_train, data_test, y_train, y_test = train_test_split(irisdf, irisdf.Species)

model = rx_logistic_regression(
    formula="  Species ~ Sepal_Length + Sepal_Width + Petal_Length + Petal_Width ",
    method="multiClass",
    data=data_train)

print(model.coef_)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
                     extra_vars_to_write=["Species", "Score"])
                     
# Print the first five rows
print(rx_data_step(score_ds, number_rows_read=5))

输出:

Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
LBFGS multi-threading will attempt to load dataset into memory. In case of out-of-memory issues, turn off multi-threading by setting trainThreads to 1.
Beginning optimization
num vars: 15
improvement criterion: Mean Improvement
L1 regularization selected 9 of 15 weights.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0493224
Elapsed time: 00:00:00.0080558
OrderedDict([('setosa+(Bias)', 2.074636697769165), ('versicolor+(Bias)', 0.4899507164955139), ('virginica+(Bias)', -2.564580202102661), ('setosa+Petal_Width', -2.8389241695404053), ('setosa+Petal_Length', -2.4824044704437256), ('setosa+Sepal_Width', 0.274869441986084), ('versicolor+Sepal_Width', -0.2645561397075653), ('virginica+Petal_Width', 2.6924400329589844), ('virginica+Petal_Length', 1.5976412296295166)])
Beginning processing data.
Rows Read: 38, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0331861
Finished writing 38 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: 0.001 seconds 
      Species   Score.0   Score.1   Score.2
0   virginica  0.044230  0.364927  0.590843
1      setosa  0.767412  0.210586  0.022002
2      setosa  0.756523  0.221933  0.021543
3      setosa  0.767652  0.211191  0.021157
4  versicolor  0.116369  0.498615  0.385016