探索非主流算法:正则化贪婪森林

机器学习领域,经常寻找那些尚未广为人知的算法。这些算法可能单独不会成为竞赛的赢家,但它们提供了一种不同的预测表格数据的方法。之所以对这些算法感兴趣,关键在于理解“单独”这个词。这些算法可以用于集成模型中,以获得比大多数流行的梯度提升算法(如XGBoost、LightGBM等)更多的优势。

本文将讨论一种名为正则化贪婪森林(RGF)的算法。它在许多数据集上的表现与梯度提升算法相当(甚至更好)。它们产生的预测结果相关性较低,并且在与其他树提升模型集成时表现良好。为了充分利用本文,应该了解梯度提升的基础知识和基本的决策树术语。

目录

  • RGF与梯度提升的比较
  • 权重优化
  • 正则化
  • 树的大小
  • 模型大小
  • Python中的实现

RGF与梯度提升的比较

在梯度提升算法中,每个分类器/回归器都是根据之前分类器/回归器的成功情况在数据上进行训练的。每次训练步骤后,权重会重新分配。错误分类的数据会增加其权重,以强调最困难的案例。这样,后续的学习器在训练期间将专注于它们。

然而,提升方法简单地将基于决策树的基础学习器视为一个黑盒,并且没有利用树结构本身。在某种意义上,提升在每次迭代中对模型进行了部分修正步骤。相比之下,RGF执行两个步骤:找到一步结构变化以获得最小化损失函数(例如最小二乘或对数损失)的新森林;调整整个森林的叶子权重以最小化损失函数。

权重优化

为了进一步最小化损失函数,每个节点的权重也会被优化:损失函数和权重优化的区间可以通过参数指定。每次添加100个(k=100)新叶子节点时修正权重效果很好,因此这被作为训练RGF模型时的默认参数。如果‘k’非常大,将类似于在最后进行一次权重更新;如果‘k’非常小(例如k=1),则会显著减慢训练速度。

正则化

对损失函数进行显式正则化对于这个算法至关重要,因为它很快就会过拟合。在生长森林的过程和权重修正过程中,可以有不同的L2正则化参数。正则化有三种方法:一种是仅在叶子上的L2正则化,其中正则化惩罚项G(F)是:另外两种称为最小惩罚正则化器。它们对每棵树的正则化惩罚项定义如下:较大的γ>1会更严重地惩罚更深的节点(对应于更复杂的函数)。可以通过λ或γ超参数调整正则化的程度。

树的大小

RGF不需要梯度提升决策树所需的树大小参数(例如,树的数量,最大深度)。在RGF中,每棵树的大小是自动确定的,作为最小化正则化损失的结果。所声明的,是森林中叶子的最大数量和正则化参数(L1和L2)。

模型大小

由于RGF对模型/森林执行完全修正步骤,因此它可以训练一个比提升算法更简单的模型,后者需要一个小的学习率/收缩和大量的估计器才能产生良好的结果。

from rgf.sklearn import RGFRegressor from sklearn.model_selection import GridSearchCV # 设置最重要的参数:允许的最大叶子数和L2正则化 parameters = { 'max_leaf': [1000, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000], 'l2': [0.1, 0.2, 0.3], 'min_samples_leaf': [5, 10] } clf = GridSearchCV(estimator=rgf, param_grid=parameters, scoring='neg_mean_squared_error', n_jobs=-1, cv=3) parameters = { 'max_leaf': [100, 200, 300, 400, 500, 800, 900, 1000], 'algorithm': ("RGF_Sib", "RGF"), 'l2': [0.1, 0.2, 0.3], 'min_samples_leaf': [5, 10] }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485