Usage
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)
Description
机器学习快速树
详细信息
rx_fast_trees是 FastRank 的实现。 FastRank 是 MART 渐变提升算法的有效实现。 渐变提升是用于回归问题的机器学习技术。 它以分步方式生成每个回归树,使用预定义的损失函数测量每个步骤的错误,并在下一步中更正错误。 因此,此预测模型实际上是较弱预测模型的合奏。 在回归问题中,提升以分步方式生成一系列此类树,然后使用任意可区分的损失函数选择最佳树。
MART 学习回归树的一组,它是树叶中标量值的决策树。 决策(或回归)树是一个类似于二进制树的流程图,其中每个内部节点一个决定两个子节点中的哪一个根据输入中的一个特征值继续。 在每个叶节点上,将返回一个值。 在内部节点中,决策基于测试 "x <= v",其中 x 输入样本中特征的值,并且 v 是此功能的可能值之一。 回归树可以生成的函数都是逐条常量函数。
树的合奏通过计算(在每个步骤中)生成一个近似损失函数渐变的回归树,并将其添加到上一个树中,其系数可最大程度地减少新树的损失。 给定实例上 MART 生成的合奏的输出是树输出的总和。
对于二元分类问题,使用某种形式的校准将输出转换为概率。
对于回归问题,输出是函数的预测值。
如果出现排名问题,则实例按合奏的输出值进行排序。
如果 method 设置为 "regression",则使用 FastTree 的回归版本。 如果设置为 "ranking",则使用 FastTree 的排名版本。 在排名案例中,实例应按树合奏的输出进行排序。 这些版本的设置中唯一的区别在于校准设置,这些设置仅用于分类。
Arguments
公式
如revoscalepy.rx_formula中所述的公式。
交互术语, F() 目前在 microsoftml 中不受支持。
数据
指定 .xdf 文件或数据帧对象的数据源对象或字符串。
方法
一个字符串,指定快速树的类型: "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
每个功能的最大非重复值(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 。 有关支持的转换,请参阅
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。
在处理任何数据转换后执行行选择(请参阅参数 transforms 或 transform_function)。 与所有表达式一样, row_selection 可以使用函数在函数调用 expression 外部定义。
变换
不支持。 表示第一轮变量转换的窗体的表达式。 与所有表达式一样, transforms 可以使用函数在函数调用expression外部定义(或row_selection)。
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 计算上下文。
集成
用于集成的控制参数。
退货
具有 FastTrees 已训练模型的对象。
注释
此算法是多线程算法,将始终尝试将整个数据集加载到内存中。
另请参阅
References
二元分类示例
'''
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