microsoftml.rx_fast_trees:提升树

使用情况

microsoftml.rx_fast_trees(formula: str,
    data: [revoscalepy.datasource.RxDataSource.RxDataSource,
    pandas.core.frame.DataFrame], method: ['binary',
    'regression'] = 'binary', num_trees: int = 100,
    num_leaves: int = 20, learning_rate: float = 0.2,
    min_split: int = 10, example_fraction: float = 0.7,
    feature_fraction: float = 1, split_fraction: float = 1,
    num_bins: int = 255, first_use_penalty: float = 0,
    gain_conf_level: float = 0, unbalanced_sets: bool = False,
    train_threads: int = 8, random_seed: int = None,
    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)

说明

机器学习快速树

详细信息

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

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

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

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

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

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

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

参数

公式

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

data

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

method

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

num_trees

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

num_leaves

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

learning_rate

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

min_split

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

example_fraction

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

feature_fraction

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

split_fraction

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

num_bins

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

first_use_penalty

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

gain_conf_level

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

unbalanced_sets

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

train_threads

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

random_seed

指定随机种子。 默认值为“None”。

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

控制用于集成的参数。

返回

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

备注

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

请参阅

rx_fast_forest, rx_predict

参考

维基百科:梯度提升(梯度树提升)

贪婪函数近似法:梯度提升计算机。

二元分类示例

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

trees_model = rx_fast_trees(
    formula=" isCase ~ age + parity + education + spontaneous + induced ",
    data=data_train)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(trees_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))

输出:

Not adding a normalizer.
Making per-feature arrays
Changing data from row-wise to column-wise
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Processed 186 instances
Binning and forming Feature objects
Reserved memory for tree learner: 7020 bytes
Starting to train ...
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0949161
Elapsed time: 00:00:00.0112103
Beginning processing data.
Rows Read: 62, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0230457
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  -4.722279     0.131369
1  False          False -11.550012     0.009757
2  False          False  -7.312314     0.050935
3   True           True   3.889991     0.825778
4  False          False  -6.361800     0.072782

回归示例

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

airquality = get_dataset("airquality")

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

airquality = airquality.as_df()


######################################################################
# Estimate a regression fast forest
# Use the built-in data set 'airquality' to create test and train data

df = airquality[airquality.Ozone.notnull()]
df["Ozone"] = df.Ozone.astype(float)

data_train, data_test, y_train, y_test = train_test_split(df, df.Ozone)

airFormula = " Ozone ~ Solar_R + Wind + Temp "

# Regression Fast Forest for train data
ff_reg = rx_fast_trees(airFormula, method="regression", data=data_train)

# Put score and model variables in data frame
score_df = rx_predict(ff_reg, data=data_test, write_model_vars=True)
print(score_df.head())

# Plot actual versus predicted values with smoothed line
# Supported in the next version.
# rx_line_plot(" Score ~ Ozone ", type=["p", "smooth"], data=score_df)

输出:

'unbalanced_sets' ignored for method 'regression'
Not adding a normalizer.
Making per-feature arrays
Changing data from row-wise to column-wise
Beginning processing data.
Rows Read: 87, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Warning: Skipped 4 instances with missing features during training
Processed 83 instances
Binning and forming Feature objects
Reserved memory for tree learner: 21528 bytes
Starting to train ...
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0512720
Elapsed time: 00:00:00.0094435
Beginning processing data.
Rows Read: 29, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0229873
Finished writing 29 rows.
Writing completed.
   Solar_R  Wind  Temp      Score
0    115.0   7.4  76.0  26.003876
1    307.0  12.0  66.0  18.057747
2    230.0  10.9  75.0  10.896211
3    259.0   9.7  73.0  13.726607
4     92.0  15.5  84.0  37.972855