(七)随机森林(RandomForest)的原理和实现

本文介绍了随机森林,一种集成学习方法,通过组合多个决策树处理分类和回归问题。重点讲解了其工作原理、解决的问题类型,以及如何通过sklearn实现。讨论了随机性在样本和特征选择中的作用,以及随机森林的优缺点。
摘要由CSDN通过智能技术生成

(七)随机森林

本系列重点在浅显易懂,快速上手。不进行过多的理论讲解:也就是不去深究what,而是关注how。全文围绕以下三个问题展开:

1)长什么样?

2)解决什么问题?

3)怎么实现?

​ 3.1)从数学讲,原理

​ 3.2)从代码上讲,如何掉包实现

1)长什么样

随机森林,是一种”集成学习(ensemble learing)“方法,算法如其名,随机和森林,首先解释森林,如下图就是多个决策树的组合,来了一个样本,分别进入到不用的决策树中,每个决策树都会输出一个结果,当时分类问题时,进行举手表决,数量最多的获胜,当时回归问题时,将所有的输出求均值作为最终的输出。所以随机森林属于集成学习方法中的bagging 算法。

在这里插入图片描述

2)解决什么问题

随机森林可以解决分类和回归问题。

分类问题如下: x 1 到 x 4 x1到x4 x1x4为特征,y为目标变量,y是离散的有1和0两种类型。通过特征来预测目标变量y的类型。

x1x2x3x4y
5.52.64.41.21
531.60.20
5.72.84.51.31
5.13.41.50.20
6.33.34.71.61

回归为题如下: x 1 到 x 13 x1到x13 x1x13为特征,y为目标变量,y是连续值。通过特征来预测目标变量y的值。

x1x2x3x4x5x6x7x8x9x10x11x12x13y
0.01182.3100.546.5865.24.09129615.3396.94.9824
0.0307.0700.476.4278.94.97224217.8396.99.1421.6
0.0307.0700.477.1861.14.97224217.8392.834.0334.7
0.0302.1800.46745.86.06322218.7394.632.9433.4
0.0702.1800.467.1554.26.06322218.7396.95.3336.2

怎么实现

数学原理

上文解释了随机森林的思路,解释了”森林“的意思,那么随机的意识是什么呢?

随机包含两方面:

1)当训练每颗树时,用到的样本时不用的,试想如果每棵树用的样本相同就没有必要训练多个决策树了。假设有m个样本,训练每棵树时都进行有放回的m次抽样,用抽样的数据集取训练决策树,这样既保证了每棵树之间既有关联又有特异。

2)特征的随机选择,我们知道决策树在划分节点时,会便利全部特征的全部划分方式,选择基尼系数最小的特征进行划分,随机森林中的每个决策树在划分时,并不会考虑所有的变量,而是随机的选择一部分特征,来计算基尼系数,再在这部分特征中选择一个特征进行节点的划分。【注意是每棵树每次节点分裂时都随机选择m个特征、而不是一棵树固定的用随机选择的m个特征】

随机森林分类效果(错误率)与两个因素有关:

1)森林中任意两棵树的相关性:相关性越大,错误率越大

2)森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低

3)减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围)。

随机森林的优点:

1)训练可以高度并行化,可以有效运行在大数据集上

2)由于对决策树候选划分属性的采样,这样在样本特征维度较高的时候,仍然可以高效的训练模型。

3)由于有了样本和属性的采样,最终训练出来的模型泛化能力强。

4)可以输出各特征对预测目标的重要性。

5)对部分特征的缺失容忍度高。

6)袋外数据可用作验证集来检验模型的有效性,不用额外划分数据集

随机森林的缺点:

1)在某些噪声比较大的样本集上,随机森林容易陷入过拟合

2)取值划分比较多的特征容易对随机森林的决策产生更大的影响,从而影响拟合的模型效果

sklearn掉包实现

# 调取sklearn包
from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor #sklearn中,线性回归模型在linear_model模块中
from sklearn import tree
# 调取sklearn中自带的数据集
from sklearn.datasets import load_iris #调用鸢尾花分类数据集
from sklearn.datasets import load_boston #调用波士顿房价数据集

X1, y1 = load_iris(return_X_y=True) #获取X,y数据
X2, y2 = load_boston(return_X_y=True) #获取X,y数据

rfc =  RandomForestClassifier()#初始化一个随机森林分类模型
rfr = RandomForestRegressor()#初始化一个随机森林回归模型

rfc.fit(X1,y1) #fit函数用于训练
rfr.fit(X2,y2)        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值