1、方法
# fit(X, y[, sample_weight]) # 利用训练数据构建模型
# predict(X) # 根据X预测目标
# clean() # 清理模型创建的缓冲区
# get_estimator(layer_idx, est_idx, estimator_type) # 从deep forest的级联层(cascade layer)中获取估计器
# get_layer_feature_importances(layer_idx) # 返回cascade layer层第layer_idx的特征重要性
# load(dirname) # 加载模型
# save([dirname]) # 保存模型
# set_estimator(estimators[, n_splits]) # 指定级联层(cascade layer)的自定义基本估计量
# set_predictor(predictor) # 指定连接到deep forest的自定义预测器
2、类
classdeepforest.CascadeForestRegressor(
n_bins=255, bin_subsample=200000, bin_type='percentile',
max_layers=20, criterion='mse', n_estimators=2, n_trees=100,
max_depth=None, min_samples_split=2, min_samples_leaf=1,
use_predictor=False, predictor='forest',
predictor_kwargs={}, backend='custom', n_tolerant_rounds=2, delta=1e-05,
partial_mode=False, n_jobs=None, random_state=None, verbose=1)
3、重要参数
# n_bins (int, default=255) # 用于非缺失值的箱数。除了n_bins个箱之外,还为丢失的值保留了一个bin。其值必须不小于2且不大于255
# bin_subsample (int, default=200,000) # 用于构造特征离散仓【feature discrete bins】的样本数。如果训练集的数目小于bin_subsample,则将使用所有训练样本
# bin_type ({"percentile", "interval"}, default= "percentile") # 用于将特征值分为integer-valued bins的分格器类型。
# 如果为“percentile”,则每个bin将具有大致相同数量的不同特征值。
# 如果为“interval”,则每个bin的大小大致相同。
# max_layers (int, default=20) # 森林深处级联层的最大数量。注意,由于内部的早期停止阶段,实际层数可能小于max_layers。
# criterion ({"mse", "mae"}, default= "mse") # 用于测量拆分质量【split quality】的函数。
# mse:mean squared error
# mae:mean absolute error
# n_estimators (int, default=2) # 每个级联层中估计器的数量。它将在内部乘以2,因为每个估计器分别包含一个【RandomForestClassifier】和一个【ExtraTreesClassifier】
# n_trees (int, default=100) # 每个估计器中的树的数量
# max_depth (int, default=None) # 每棵树的最大深度。None表示没有限制
# min_samples_split (int, default=2) # 拆分内部节点【split an internal node】所需的最小样本数
# min_samples_leaf (int, default=1) # 叶节点【leaf node】上所需的最小样本数
# use_predictor (bool, default=False) # 是否构建连接到deep forest的预测器。使用预测器可以提高深层森林的性能。
# predictor ({"forest", "xgboost", "lightgbm"}, default= "forest") # 连接到deep forest的预测器的类型。如果use_predictor是False,那么该参数没有意义。
# predictor_kwargs (dict, default={}) # 连接到deep forest的预测器的配置。指定此选项将扩展/覆盖从deep forest继承的原始参数。如果use_predictor是False,那么该参数没有意义。
# backend ({"custom", "sklearn"}, default= "custom") # 森林估计器的后端。custom:更高的时间效率;sklean:额外的功能
# n_tolerant_rounds (int, default=2) # 指定何时进行early stopping。当训练集上的验证效果与n_tolerant_rounds轮后 实现的最佳验证性能相比没有改善时,训练过程终止。
# delta (float, default=1e-5) # 指定提前停止的阈值。如果拟合的cascade的性能与迄今为止实现的最佳验证性能相比没有提高delta,则触发对n_tolerant_rounds的计数。
# partial_mode (bool, default=False) # 是否以分块模式训练深林。对于大型数据集,建议使用分块模式。如果True,分块模式被激活,并且所有拟合的估计器将被转储在local buffer中;如果False,所有拟合的估计量都直接存储在memory中。
# n_jobs (int or None, default=None) # fit()和predict()并行运行的数目。None表示1
# random_state (int or None, default=None) # int:random_state 是由随机数生成器使用的种子;None:随机数生成器使用np.random
# verbose (int, default=1) # 控制拟合和预测时的冗长程度。If <= 0:静默模式,这意味着不会显示日志记录信息;IF 1:将显示关于级联层级别的日志记录信息;IF >1:将显示完整的日志记录信息。
4、参数优化
4.1 Better Accuracy(更好的精度)
- Increase model complexity(增加模型复杂度)
# 用于增加模型复杂度的重要参数
# n_estimators
# n_trees
# max_layers
- Add the predictor(增加预测器)
# 借用RF或者GBDT的力量
# use_predictor
# predictor
# 确保XGBoost or LightGBM已安装
# 决定是否添加预测器的一个有用规则是将深层森林的性能与从训练数据中生成的独立预测器进行比较。
# 如果预测器始终优于深层森林,那么深层森林的性能有望通过添加预测器来提高。在这种情况下,从森林深处产生的增强特征也有助于训练预测器。
4.2 Faster Speed(更快的速度)
- Parallelization(并行)
# n_jobs # 大于1就是并行
- Fewer Splits(更少的分割)
# n_bins # 较小的值意味着将考虑较少的分割截止,应为[2,255]范围内的整数。
# bin_type # 将其值设置为“间隔”,可以在特征值累积的密集间隔上考虑较少的分割截断。
- Decrease model complexity(降低模型复杂性)
# max_depth
# min_samples_leaf # 指定叶节点上所需的最小样本数。最小值为1。
# n_estimators #
# n_trees
# n_tolerant_rounds # 指定处理提前停止时的运行次数。最小值为1。
# 由于深层森林根据训练数据的验证性能自动确定模型复杂性,因此将上述参数设置为较小的值可能会导致具有更多级联层的深层森林模型。
4.3 Lower Memory Usage(低内存)
- Partial Mode(分块模式)
# partial_mode
# 决定是否在局部模式下训练和评估模型。如果设置为True,则模型将在本地缓冲区中主动转储拟合的估计量。
# 因此,深层森林的内存使用量不再随着拟合级联层的数量线性增加。
学习链接