Usage
microsoftml.rx_fast_linear()
Description
一种用于线性二元分类和回归的随机双坐标上升(SDCA)优化训练器。
详细信息
rx_fast_linear 是基于随机双坐标上升(SDCA)方法的训练器,这是一种针对凸目标函数的先进优化技术。 由于采用半同步实现支持多线程,该算法可扩展用于大型内存外数据集。
收敛的基础是定期在独立线程中强制执行原始更新和双重更新同步。 还提供了多种损失函数的选择。 SDCA方法结合了逻辑回归和SVM算法的若干最佳特性和功能。
有关SDCA的更多信息,请参阅参考文献部分的引用。
传统的优化算法,如随机梯度下降(SGD),直接优化经验损失函数。 SDCA选择了另一种方法,以优化对偶问题。 对偶损失函数通过每个例子的权重参数化。 在每次迭代中,当从训练数据集读取训练样本时,相应的示例权重会被调整,使对偶损失函数相对于当前样本得到优化。 SDCA不需要学习率来确定步长,而这些步长则不同于各种梯度下降方法。
rx_fast_linear 目前支持三类损耗函数的二元分类:对数损耗、铰链损耗和平滑铰链损耗。
线性回归也支持平方损失函数。 弹性净正则化可以通过和l1_weight参数来指定l2_weight。 注意,这 l2_weight 会影响收敛率。 一般来说,SDCA收 l2_weight敛速度越大。
注意,这是一个 rx_fast_linear 随机和流优化算法。 结果取决于训练数据的顺序。 为了获得可重复的结果,建议将 设shuffle为 False 和 train_threads 。1
Arguments
公式
revoscalepy.rx_formula中描述的公式。
交互术语, F() 目前在 microsoftml 中不受支持。
数据
指定 .xdf 文件或数据帧对象的数据源对象或字符串。
方法
用字符字符串指定模型类型: "binary" 用于默认的二元分类或 "regression" 线性回归。
loss_function
指定用于优化的经验损失函数。 对于二元分类,有以下选项:
log_loss:对数损失。 这是默认值。hinge_loss:SVM铰链损失。 其参数表示边距大小。smooth_hinge_loss:光滑的铰接丢失。 其参数表示平滑常数。
对于线性回归,目前支持平方损失 squared_loss 。 当该参数设置为 无时,其默认值取决于学习类型:
log_loss用于二元分类。squared_loss对于线性回归。
以下示例将loss_function hinge_loss变为: rx_fast_linear(..., loss_function=hinge_loss())。
l1_weight
指定L1正则化权重。 该值必须是非负或 无。 如果指定 为“无” ,则根据数据集自动计算实际值。 无 是默认值。
l2_weight
指定L2正则化权重。 该值必须是非负或 无。 如果指定 为“无” ,则根据数据集自动计算实际值。 无 是默认值。
train_threads
指定可用于运行算法的并发线程数量。 当该参数设置为 无时,线程数量根据进程可用的逻辑处理器数量以及数据稀疏度决定。 设置为 以 1 在单线程内运行算法。
convergence_tolerance
指定作为收敛标准的容忍阈值。 它必须在0到1之间。 默认值为 0.1。 如果相对对偶性差距(即对偶性差距与原始损失的比值)低于规定的收敛容差,则该算法被视为收敛。
max_iterations
规定训练迭代次数的上限。 该参数必须为正或 无。 如果指定 为“无” ,则根据数据集自动计算实际值。 每次迭代都需要对训练数据进行完整处理。 训练在迭代总数达到规定上限或损失函数收敛时终止,以较早者为准。
洗牌
指定是否洗牌训练数据。 设置为 True 洗牌数据; False 而不是洗牌。 默认值为 True。 SDCA是一种随机优化算法。 如果开启了洗牌,训练数据会在每次迭代中重新洗牌。
check_frequency
计算损失函数后,计算并检查是否收敛的迭代次数。 指定的值必须是正整数或无。 如果 无,则根据数据集自动计算实际值。 否则,例如,如果 checkFrequency = 5 指定了,则计算损失函数,每5次迭代检查收敛性。 损失函数的计算需要对训练数据进行一次单独的完整处理。
规范化
指定使用的自动规范化类型:
"Auto":如果需要规范化,则会自动执行。 这是默认选项。"No":不执行规范化。"Yes":执行规范化。"Warn":如果需要规范化,则会显示警告消息,但不执行规范化。
规范化将不同的数据范围重新缩放为标准规模。 特征缩放可确保数据点之间的距离成正比,并使各种优化方法(如梯度下降)的聚合速度要快得多。 如果执行规范化, MaxMin 则使用规范化器。 它以间隔 [a, b] 将值规范化,其中 -1 <= a <= 0 和 0 <= b <= 1 和 b - a = 1。 此规范化器通过将零映射到零来保留稀疏性。
ml_transforms
指定要在训练之前对数据执行的 MicrosoftML 转换的列表;如果未执行任何转换,则为 None 。 有关支持的转换,请参阅
ml_transform_vars
指定要用于 ml_transforms 变量名称的字符向量;如果未使用,则为 None 。
默认值为无。
row_selection
不支持。 指定数据集中的行(观察值),这些行(观察值)由模型使用数据集(以引号为单位)中的逻辑变量的名称,或使用数据集中的变量的逻辑表达式。 例如:
row_selection = "old"将仅使用变量old值所在的True观察值。row_selection = (age > 20) & (age < 65) & (log(income) > 10)仅使用变量值age介于 20 和 65 之间的观察值,而变量的值logincome大于 10。
在处理任何数据转换后执行行选择(请参阅参数 transforms 或 transform_function)。 与所有表达式一样, row_selection 可以使用函数在函数调用 expression 外部定义。
变换
不支持。 表示第一轮变量转换的窗体的表达式。 与所有表达式一样, transforms 可以使用函数在函数调用row_selection外部定义(或expression)。
transform_objects
不支持。 一个命名列表,其中包含可由 <
transform_function
变量转换函数。
transform_variables
转换函数所需的输入数据集变量的字符向量。
transform_packages
不支持。 一个字符向量,用于指定其他 Python 包(在指定 RxOptions.get_option("transform_packages")包之外)可供使用并预加载,以便在变量转换函数中使用。
例如,在 revoscalepy 函数中显式定义的函数通过参数transforms和transform_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 计算上下文。
集成
用于集成的控制参数。
Returns
具有 FastLinear 已训练模型的对象。
注释
该算法是多线程的,不会尝试将整个数据集加载到内存中。
References
二元分类示例
'''
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