神经网络可以堆叠为深度神经网络,那我们可以考虑,是不是可以将其他的学习模型堆叠起来,以获取更好的表示性能,深度森林就是基于这种想法提出来的一种深度结构。通过级联的方式堆叠多层随机森林,以获得更好的特征表示和学习性能。
 
结构图:
在这里插入图片描述
 
加利福尼亚房价简单实践应用代码:

from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import sklearn
import time
# 快速安装:pip install deep-forest -i https://pypi.tuna.tsinghua.edu.cn/simple
from deepforest import CascadeForestRegressor

print(sklearn.datasets.get_data_home())  # sklearn放置数据包的地方
# 解决数据包下载403报错问题 https://zhuanlan.zhihu.com/p/556565449
X, y = fetch_california_housing(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)

'''
Implementation of the deep forest for regression.
级联森林接口: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)
参数详解:
    1、n_bins:obj:`int`,默认值=255 用于非缺失值的存储箱数。它的值必须不小于2且不大于255。
    2、bin_subsample:obj:`int`,默认值=200000 用于构造特征离散仓的样本数。如果训练集的大小小于“bin_subsample”,则将使用所有训练样本。
    3、bin_type:{“percentage”,“interval”},默认值=“percentral” 用于将特征值分为整数值分格的分格器类型。
        如果“percentage”,则每个箱将具有大致相同的不同特征值的数量。
        如果“interval”,则每个bin的大小将大致相同。
    4、max_layers:obj:`int`,默认值=20 森林深处级联层的最大数量。请注意实际层数可以小于“max_layers”,因为内部提前停止阶段。
    5、criterion:obj:{“mse”,“mae”},默认值=“mse“ 用于测量拆分质量的函数。支持的criteria为
        “mse”表示均方误差,等于方差减少作为特征选择标准,
        “mae”表示平均绝对误差。
    6、n_estimators:obj:`int`,默认值=2 每个级联层中估计器的数量。它将被相乘乘以2,因为每个估计器包含`RandomForestRegressor`和`ExtraTreesRegressor'
    7、n_trees:obj:`int`,默认值=100 每个估计器中的树数。
    8、max_depth:obj:`int`,默认值=无 每棵树的最大深度``无``表示没有约束。
    9、min_samples_split:obj:`int`,默认值=2 拆分内部节点所需的最小样本数。
    10、min_samples_leaf:obj:`int`,默认值=1 叶节点上所需的最小样本数。
    11、use_predictor:obj:`bool`,默认值=False 是否构建连接到深林的预测器。使用预测器可以提高深森林的性能。
    12、predictor:{"forest", "xgboost", "lightgbm"},默认值=:obj:“forest” 连接到深林的预测器的类型。如果`use_predictor``为False,此参数将无效。
    13、predictor_kwargs:obj:`dict`,默认值={} 连接到深度森林的预测器的配置。指定此项将扩展或者覆盖来自森林深处的原始参数inherit。如果`use_predictor`为False,则此参数将无效。
    14、backend::obj:`{“custom”,“sklearn”}`,default=:obj:`“custom` 森林估计器的后端。支持的后端是``自定义``为了用于更高的时间,记忆效率和“sklearn”用于额外的功能。
    15、n_tolerant_rounds:obj:`int`,默认值=2 指定何时进行早停。当训练集上的验证性能与“n_tolerant_rounds”轮迄今为止获得的最佳验证性能相比没有改善时,训练过程终止
    16、delta::obj:`float`,默认值=1e-5 指定提前停止的阈值。如果拟合级联层的性能与迄今为止实现的最佳验证性能相比没有提高“delta”,则触发对“n_tolerant_rounds”的计数。
    17、partial_mode::obj:`bool',默认值=False 是否以部分模式训练深度森林。对于大型数据集,建议使用部分模式。
        如果为“True”,则部分模式被激活并所有拟合的估计器将被转储到本地缓冲区中;
        如果“False”,则所有拟合的估计器都直接存储在内存。
    18、n_jobs : :obj:`int` or ``None``, default=None 对于`fit`和`predict`,要并行运行的作业数。None表示1,除非在`joblib.sparallel_backend`上下文中`。 -1表示使用所有
'''
model = CascadeForestRegressor(max_layers=30, n_estimators=3, n_trees=300,
                               use_predictor=True, predictor="forest",
                               n_tolerant_rounds=3, n_jobs=-1,
                               random_state=1)
'''
训练函数:fit(self, X, y, sample_weight=None)
sample_weight 样本权重: :obj:`numpy.ndarray` of shape (n_samples,), default=None
   Sample weights. If ``None``, 则对样本进行相等的加权。
'''
startTime = time.strftime("%Y-%m-%d %H:%m", time.localtime())
print(startTime)

model.fit(X_train, y_train)
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("\nTesting MSE: {:.3f}".format(mse))

endTime = time.strftime("%Y-%m-%d %H:%m", time.localtime())
print(endTime)

 
输出:

C:\Users\xxx\scikit_learn_data
2023-04-14 23:04
[2023-04-14 15:21:54.022] Start to fit the model:
[2023-04-14 15:21:54.022] Fitting cascade layer = 0 
[2023-04-14 15:21:57.162] layer = 0  | Val MSE = 0.25359 | Elapsed = 3.140 s
[2023-04-14 15:21:57.174] Fitting cascade layer = 1 
[2023-04-14 15:22:02.784] layer = 1  | Val MSE = 0.22699 | Elapsed = 5.610 s
[2023-04-14 15:22:02.800] Fitting cascade layer = 2 
[2023-04-14 15:22:12.131] layer = 2  | Val MSE = 0.23170 | Elapsed = 9.331 s
[2023-04-14 15:22:12.131] Early stopping counter: 1 out of 3
[2023-04-14 15:22:12.150] Fitting cascade layer = 3 
[2023-04-14 15:22:26.634] layer = 3  | Val MSE = 0.23658 | Elapsed = 14.484 s
[2023-04-14 15:22:26.634] Early stopping counter: 2 out of 3
[2023-04-14 15:22:26.657] Fitting cascade layer = 4 
[2023-04-14 15:22:47.256] layer = 4  | Val MSE = 0.23890 | Elapsed = 20.599 s
[2023-04-14 15:22:47.256] Early stopping counter: 3 out of 3
[2023-04-14 15:22:47.256] Handling early stopping
[2023-04-14 15:22:49.279] The optimal number of layers: 2
[2023-04-14 15:22:49.305] Fitting the concatenated predictor: forest
[2023-04-14 15:22:51.562] Finish building the predictor | Elapsed = 2.257 s
[2023-04-14 15:22:52.027] Start to evalute the model:
[2023-04-14 15:22:52.028] Evaluating cascade layer = 0 
[2023-04-14 15:22:52.599] Evaluating cascade layer = 1 
[2023-04-14 15:22:53.185] Evaluating the predictor

Testing MSE: 0.230
2023-04-14 23:04

 
加利福尼亚房价的数据集:https://download.csdn.net/download/fgg1234567890/87690752

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐