阅读 427

机器学习之随机森林回归篇(RandomForestRegressor)

这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战

一 随机森林回归简介

class sklearn.ensemble.RandomForestRegressor (n_estimators=’warn’, criterion=’mse’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False)

所有的参数,属性与接口,全部和随机森林分类器一致。仅有的不同就是回归树与分类树的不同,不纯度的指标, 参数Criterion不一致。

二 重要参数,属性和接口

2.1 criterion

回归树衡量分枝质量的指标,支持的标准有三种:

  • "mse"均方误差mean squared error(MSE),父节点和叶子节点之间的均方误差的差额将被用来作为 特征选择的标准,这种方法通过使用叶子节点的均值来最小化L2损失
  • “friedman_mse”费尔德曼均方误差,使用弗里德曼针对潜在分枝中的问题改进后的均方误差
  • "mae"绝对平均误差MAE(mean absolute error),这种指标使用叶节点的中值来最小化L1损失

在回归树中,MSE不仅仅是分枝质量衡量指标,也是衡量回归树回归的指标,在使用交叉验证,往往选择均方误差作为我们的评估(在分类树中这个指标是score代表的预测准确率)。在回归中MSE越小越好。 回归树的接口score返回的是R平方,并不是MSE。 虽然均方误差永远为正,但是sklearn当中使用均方误差作为评判标准时,却是计算”负均方误差“(neg_mean_squared_error)。sklearn在计算模型评估指标的时候,会考虑指标本身的性质,均方误差本身是一种误差,被划分为一种损失(loss),都以负数表示。真正的均方误差MSE的数值,其实就是neg_mean_squared_error去掉负号的数字。 随 机森林回归并没有predict_proba这个接口,因为对于回归来说,并不存在一个样本要被分到某个类别的概率问 题,因此没有predict_proba这个接口。

2.2 随机森林的实现

from sklearn.datasets import load_boston
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestRegressor

boston=load_boston()
regressor=RandomForestRegressor(n_estimators=120,random_state=200)
cross_val_score(regressor,boston.data,boston.target,cv=10,scoring='neg_mean_squared_error')
复制代码

image.png 随机森林另一个重要的作用被用来填补缺失值

三 调参的基本思想

3.1 泛化误差

讲正确的调参思路。模型调参,第一步是要找准目标:我们要做什么?一般来说,这个目标是提升 某个模型评估指标,比如对于随机森林来说,我们想要提升的是模型在未知数据上的准确率(由score或 oob_score_来衡量)。找准了这个目标,我们就需要思考:模型在未知数据上的准确率受什么因素影响?在机器学 习中,我们用来衡量模型在未知数据上的准确率的指标,叫做泛化误差 当模型在未知数据(测试集或者袋外数据)上表现糟糕时,说明模型的泛化程度不够,泛化误差大,模型的效果不好。泛化误差受到模型的结构(复杂度)影响。当模型太复杂,模型就会过拟合,泛化能力就不够,所以泛化误差大。当模型太简单,模型就会欠拟合,拟合能力 就不够,所以误差也会大。只有当模型的复杂度刚刚好的才能够达到泛化误差最小的目标。

  • 模型太复杂或者太简单,都会让泛化误差高,我们追求的是位于中间的平衡点
  • 模型太复杂就会过拟合,模型太简单就会欠拟合
  • 对树模型和树的集成模型来说,树的深度越深,枝叶越多,模型越复杂
  • 树模型和树的集成模型的目标,都是减少模型复杂度,把模型往图像的左边移动

n_estimators:提升至平稳,n_estimators↑,不影响单个模型的复杂度 max_depth:有增有减,默认最大深度,即最高复杂度,向复杂度降低的方向调参 max_depth↓,模型更简单,且向图像的左边移动 min_samples_leaf:有增有减,默认最小限制1,即最高复杂度,向复杂度降低的方向调参 min_samples_leaf↑,模型更简单,且向图像的左边移动 min_samples_split:有增有减,默认最小限制2,即最高复杂度,向复杂度降低的方向调参 min_samples_split↑,模型更简单,且向图像的左边移动 max_features:有增有减,默认auto,是特征总数的开平方,位于中间复杂度,既可以 向复杂度升高的方向,也可以向复杂度降低的方向调参 max_features↓,模型更简单,图像左移 max_features↑,模型更复杂,图像右移 criterion:有增有减,一般使用gini

3.2 方差 VS 偏差

如下图,每个点就是集成算法中的一个基评估器产生的预测值。红色虚线代表着这些预测值的均值, 而蓝色的线代表着数据本来的面貌。

  • 偏差:模型的预测值与真实值之间的差异,即每一个红点到蓝线的距离。在集成算法中,每个基评估器都会有 自己的偏差,集成评估器的偏差是所有基评估器偏差的均值。模型越精确,偏差越低。 方差:反映的是模型每一次输出结果与模型预测值的平均水平之间的误差,即每一个红点到红色虚线的距离, 衡量模型的稳定性。模型越稳定,方差越低。

image.png 偏差衡量模型是否预测得准确,偏差越小,模型越准,方差衡量模型每次预测的结果是否接近,即是说方 差越小,模型越稳。一个好的模 型,要对大多数未知数据都预测得”准“又”稳“。 我们调参的目标是,达到方差和偏差的完美平衡。虽然方差和偏差不能同时达到最小值,但他们组成的泛化误差却可以有一个最低点,而我们就是要寻找这个最低点。对复杂度大的模型,要降低方差,对相对简单的模型,要降低 偏差。随机森林的基评估器都拥有较低的偏差和较高的方差

四 Bagging VS Boosting

评估器:

  • 装袋法 Bagging:相互独立,同时运行
  • 提升法 Boosting:相互关联,按顺序依次构建,后建的模型会在先建模型预 测失败的样本上有更多的权重
  • 抽样数据集:
  • 装袋法 Bagging:有放回抽样
  • 提升法 Boosting:有放回抽样,但会确认数据的权重,每次抽样都会给容易 预测失败的样本更多的权重
  • 决定集成的结果:
  • 装袋法 Bagging:平均或少数服从多数 原则
  • 提升法 Boosting:加权平均,在训练集上表现更好的模型会有更大的权重
  • 目标:
  • 装袋法 Bagging:降低方差,提高模型 整体的稳定性
  • 提升法 Boosting:降低偏差,提高模型整体的精确度
  • 单个评估器存在过拟 合问题的时候:
  • 装袋法 Bagging:能够一定程度上解决 过拟合问题
  • 提升法 Boosting:可能会加剧过拟合问题
  • 单个评估器的效力比 较弱的时候:
  • 装袋法 Bagging:不是非常有帮助
  • 提升法 Boosting:很可能会提升模型表现
  • 代表算法:
  • 装袋法 Bagging:随机森林
  • 提升法 Boosting:梯度提升树,Adaboost
文章分类
人工智能
文章标签