microsoftml.rx_fast_linear:使用随机双坐标上升的线性模型

使用情况

microsoftml.rx_fast_linear()

说明

用于线性二元分类和回归的随机双坐标上升 (SDCA) 优化训练器。

详细信息

rx_fast_linear 是基于随机双坐标上升 (SDCA) 方法的训练器,这是一种用于凸目标函数的先进的优化技术。 由于支持多线程的半异步实现,该算法可进行缩放以用于内存不足的大型数据集。 通过在单独的线程中定期强制执行原始更新和双重更新之间的同步来保证收敛。 此外还有多种损失函数可供选择。 SDCA 方法结合了逻辑回归和 SVM 算法的几个最佳属性和功能。 有关 SDCA 的详细信息,请参阅参考部分中的引文。

传统的优化算法(如随机梯度下降 (SGD))可以直接优化经验损失函数。 SDCA 选择了一种不同的方法来优化对偶问题。 双重损失函数由每个示例的权重进行参数化。 在每次迭代中,当训练数据集中的训练示例被读取时,相应示例的权重会调整,从而针对当前示例优化双重损失函数。 SDCA 无需学习速率也可确定各种梯度下降方法所需的步长。

rx_fast_linear 目前支持三类损失函数的二元分类:对数损失、合页损失和平滑合页损失。 线性回归还支持平方损失函数。 可以通过 l2_weightl1_weight 参数指定弹性网络正则化。 请注意,l2_weight 对收敛速度有影响。 通常,l2_weight 越大,SDCA 收敛速度越快。

请注意,rx_fast_linear 是一种随机的流式处理优化算法。 结果取决于训练数据的顺序。 若要获得可重现的结果,建议将 shuffle 设置为 False,并将 train_threads 设置为 1

参数

公式

revoscalepy.rx_formula 中描述的公式。 microsoftml 目前不支持交互术语和 F()

data

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

method

使用字符串指定模型类型:"binary" 用于默认二元分类,而 "regression" 用于线性回归。

loss_function

指定要优化的经验损失函数。 对于二元分类,可以选择以下选项:

  • log_loss:对数损失。 这是默认值。

  • hinge_loss:SVM 合页损失。 该函数的参数表示差额大小。

  • smooth_hinge_loss:平滑合页损失。 该函数的参数表示平滑常数。

对于线性回归,目前支持平方损失 squared_loss。 如果将此参数设置为“None”,其默认值取决于学习类型:

以下示例将 loss_function 更改为 hinge_lossrx_fast_linear(..., loss_function=hinge_loss())

l1_weight

指定 L1 正则化权重。 该值必须为非负数或“None”。 如果指定了“None”,将根据数据集自动计算实际值。 默认值为“None”。

l2_weight

指定 L2 正则化权重。 该值必须为非负数或“None”。 如果指定了“None”,将根据数据集自动计算实际值。 默认值为“None”。

train_threads

指定可用于运行算法的并发线程数。 如果将此参数设置为“None”,则根据进程可用的逻辑处理器数以及数据的稀疏度来确定所使用的线程数。 如果要在单个线程中运行算法,请将其设置为 1

convergence_tolerance

指定用作收敛标准的容差阈值。 该值必须介于 0 和 1 之间。 默认值是 0.1。 如果相对对偶间隙(对偶间隙与原始损失之间的比率)低于指定的收敛容差,则认为该算法已经收敛。

max_iterations

指定训练迭代次数的上限。 该参数值必须为正数或“None”。 如果指定了“None”,将根据数据集自动计算实际值。 每次迭代都需要对训练数据进行一次完整传递。 训练在总迭代次数达到指定上限或损失函数收敛后终止(以较早发生者为准)。

随机选择

指定是否随机选择训练数据。 如果要随机选择训练数据,请将其设置为 True;否则设置为 False。 默认值是 True。 SDCA 是一种随机优化算法。 如果启用随机选择,则每次迭代时都会随机选择训练数据。

check_frequency

迭代次数,迭代后计算和检查损失函数以确定是否收敛。 指定的值必须是正整数或“None”。 如果指定为 None,则根据数据集自动计算实际值。 否则,例如,如果指定了 checkFrequency = 5,则每 5 次迭代计算一次损失函数并检查收敛性。 若要计算损失函数,则需要对训练数据执行单独的完整传递。

规范化

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

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

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

  • "Yes":执行规范化。

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

规范化将不同的数据范围重新缩放为标准规模。 特征缩放可确保数据点之间的距离成比例,使各种优化方法(如梯度下降)的收敛速度更快。 如果执行规范化,则使用 MaxMin 规范化程序。 它对区间 [a, b] 中的值进行规范化,其中 -1 <= a <= 00 <= b <= 1 并且 b - a = 1。 此规范化程序通过将 0 映射到 0 来保持稀疏度。

ml_transforms

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

ml_transform_vars

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

row_selection

不受支持。 使用数据集中的逻辑变量名称(带引号)或通过使用数据集中的变量的逻辑表达式指定模型要使用的数据集中的行(观察值)。 例如:

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

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

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

转换

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

transform_objects

不受支持。 一个命名列表,其中包含可由 transformstransform_functionrow_selection 引用的对象。

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:报告已处理的行数和所有计时。

verbose

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

compute_context

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

ensemble

控制用于集成的参数。

返回

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

备注

该算法是多线程的,不会尝试将整个数据集加载到内存中。

请参阅

hinge_loss, log_loss, smoothed_hinge_loss, squared_loss, rx_predict

参考

纵向扩展随机双坐标上升

用于正则化损失最小化的随机双坐标上升方法

二元分类示例

'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, 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)

forest_model = rx_fast_linear(
    formula=" isCase ~ age + parity + education + spontaneous + induced ",
    data=data_train)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(forest_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, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 8064.
Auto-tuning parameters: L2 = 2.666837E-05.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 568.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.5810985
Elapsed time: 00:00:00.0084876
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0292334
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds 
  isCase PredictedLabel     Score  Probability
0   True           True  0.990544     0.729195
1  False          False -2.307120     0.090535
2  False          False -0.608565     0.352387
3   True           True  1.028217     0.736570
4   True          False -3.913066     0.019588

回归示例

'''
Regression.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

attitude = get_dataset("attitude")

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

attitudedf = attitude.as_df()
data_train, data_test = train_test_split(attitudedf)

model = rx_fast_linear(
    formula="rating ~ complaints + privileges + learning + raises + critical + advance",
    method="regression",
    data=data_train)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
                     extra_vars_to_write=["rating"])
                     
# 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: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 68180.
Auto-tuning parameters: L2 = 0.01.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 54.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.1114324
Elapsed time: 00:00:00.0090901
Beginning processing data.
Rows Read: 8, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0330772
Finished writing 8 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds 
   rating      Score
0    71.0  72.630440
1    67.0  56.995350
2    67.0  52.958641
3    72.0  80.894539
4    50.0  38.375427

损失函数