microsoftml.rx_fast_forest:随机林

Usage

microsoftml.rx_fast_forest(formula: str,
    data: [revoscalepy.datasource.RxDataSource.RxDataSource,
    pandas.core.frame.DataFrame], method: ['binary',
    'regression'] = 'binary', num_trees: int = 100,
    num_leaves: int = 20, 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,
    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的随机林和分位数回归林实现。 该模型由决策树的合奏组成。 决策林中的每个树通过预测输出高斯分布。 通过树合奏执行聚合,以查找最接近模型中所有树的组合分布的 Gaussian 分布。

此决策林分类器由决策树的一组组成。 通常,合奏模型比单个决策树提供更好的覆盖范围和准确性。 决策林中的每个树都会输出高斯分布。

Arguments

公式

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

数据

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

方法

表示快速树类型的字符串:

  • "binary" 对于默认的快速树二元分类或

  • "regression" 用于快速树回归。

num_trees

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

num_leaves

可在任何树中创建的最大叶数(终端节点)。 较高的值可能会增加树的大小并得到更好的精度,但风险过度拟合,并且需要更长的训练时间。 默认值为 20。

min_split

形成叶所需的最小训练实例数。 也就是说,回归树叶中允许的最小文档数(从子采样的数据中获取)。 “拆分”表示树(节点)的每个级别中的特征是随机划分的。 默认值为 10。

example_fraction

要用于每个树的随机选择实例的分数。 默认值为 0.7。

feature_fraction

要用于每个树的随机选择特征的分数。 默认值为 0.7。

split_fraction

要在每个拆分上使用的随机选择特征的分数。 默认值为 0.7。

num_bins

每个功能的最大非重复值(bins)数。 默认值为 255。

first_use_penalty

特征首先使用惩罚系数。 默认值为 0。

gain_conf_level

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

train_threads

训练中使用的线程数。 如果指定 了 None ,则内部将确定要使用的线程数。 默认值为 None

random_seed

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

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

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

集成

用于集成的控制参数。

退货

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

注释

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

另请参阅

rx_fast_treesrx_predict

References

维基百科:随机林

分位回归林

从树桩到树木到森林

二元分类示例

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

输出:

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: 7176 bytes
Starting to train ...
Not training a calibrator because a valid calibrator trainer was not provided.
Elapsed time: 00:00:00.2704185
Elapsed time: 00:00:00.0443884
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0253862
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds 
  isCase PredictedLabel      Score
0  False          False -36.205067
1   True          False -40.396084
2  False          False -33.242531
3  False          False -87.212494
4   True          False -13.100666

回归示例

'''
Regression.
'''
import numpy
import pandas
from microsoftml import rx_fast_forest, 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_forest(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)

输出:

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, 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: 21372 bytes
Starting to train ...
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0644269
Elapsed time: 00:00:00.0109290
Beginning processing data.
Rows Read: 29, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0314390
Finished writing 29 rows.
Writing completed.
   Solar_R  Wind  Temp      Score
0    190.0   7.4  67.0  26.296144
1     20.0  16.6  63.0  14.274153
2    320.0  16.6  73.0  23.421144
3    187.0   5.1  87.0  80.662109
4    175.0   7.4  89.0  67.570549