microsoftml.rx_fast_forest:随机林
使用情况
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)
说明
机器学习快速林
详细信息
决策树是对输入执行一系列简单测试的非参数模型。 此决策过程将决策树映射到训练数据集中的输出,这些数据集的输入与正在处理的实例类似。 基于相似性度量值在二叉树数据结构的每个节点处做出决策,该度量值通过树的分支以递归方式映射每个实例,直到到达适当的叶节点并返回输出决策。
决策树具有若干优势:
在训练和预测期间的计算和内存使用效率都很高。
它们可以表示非线性决策边界。
可执行集成的特征选择和分类。
可以抵抗干扰特征的影响。
快速林回归是使用 rx_fast_trees
中的回归树学习器的随机林和分位数回归林实现。
该模型由决策树的系综构成。 决策林中的每棵树都通过预测输出高斯分布。 聚合是通过树的集成执行的,用于查找与模型中所有树的组合分布最接近的高斯分布。
此决策林分类器由决策树的系综构成。 一般说来,系综模型可以提供比单个决策树更大的覆盖范围和更高的准确度。 决策林中的每棵树均输出一个高斯分布。
参数
公式
revoscalepy.rx_formula 中描述的公式。
microsoftml 目前不支持交互术语和 F()
。
data
指定 .xdf 文件或数据帧对象的数据源对象或字符串。
method
表示快速树类型的字符串:
"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
每个特征的最大不同值(箱)数。 默认值为 255。
first_use_penalty
该特征首先使用惩罚系数。 默认值为 0。
gain_conf_level
树拟合增益置信度要求(应在 [0,1]
范围内)。 默认值为 0。
train_threads
训练中使用的线程数。 如果指定了“None”,则要使用的线程数在内部确定。 默认值为“None”。
random_seed
指定随机种子。 默认值为“None”。
ml_transforms
指定在训练前要对数据执行的 MicrosoftML 转换列表;如果不需要执行任何转换,则指定为“None”。 有关支持的转换,请参阅 featurize_text
、categorical
和 categorical_hash
。
这些转换在任何指定的 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 之间且income
变量的log
值大于 10 的观察值。
在处理任何数据转换之后执行行选择(请参阅参数 transforms
或 transform_function
)。 与所有表达式一样,row_selection
可以使用 expression
函数在函数调用之外定义。
转换
不受支持。 表示第一轮变量转换的窗体表达式。 与所有表达式一样,可以使用 expression
函数在函数调用之外定义 transforms
(或 row_selection
)。
transform_objects
不受支持。 一个命名列表,其中包含可由 transforms
、transform_function
和 row_selection
引用的对象。
transform_function
变量转换函数。
transform_variables
转换函数所需的输入数据集变量的字符向量。
transform_packages
不受支持。 一个字符向量,用于指定将提供和预加载以在变量转换函数中使用的其他 Python 包(除 RxOptions.get_option("transform_packages")
中指定的包以外)。
例如,在 revoscalepy 函数中通过其 transforms
和 transform_function
参数显式定义的那些包,或者通过其 formula
或 row_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
,则计算期间不会打印详细输出。 从 1
到 4
的整数值表示提供的信息量逐步增加。
compute_context
设置执行计算的上下文,使用有效的 RxComputeContext
指定。
目前支持本地和 RxInSqlServer
计算上下文。
ensemble
控制用于集成的参数。
返回
具有已训练模型的 FastForest
对象。
备注
此算法是多线程的,将始终尝试将整个数据集加载到内存中。
请参阅
参考
二元分类示例
'''
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