1.什么是随机森林

随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。

解读下上面的话:

1.随机森林属于集成算法,属于集成算法中的bagging,另一种就是boosting了,集成意味着着该算法是多个算法组合而成

2.随机森林是由决策树集成的,这个很好理解,单木为树,多木成林。所以它叫森林,所以你想弄明白什么是随机森林,就必须先整明白什么是决策树。

其实从直观角度来解释,每棵决策树都是一个分类器(假设现在针对的是分类问题),那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的 Bagging 思想。

随机森林的出现是为了解决决策树泛化能力比较弱的特点,因为决策树就有一棵树,它的决策流只有一条, 泛化能力弱。而随机森林就比较好解决了这个问题。

森林我们知道是什么了,那么随机是什么? 随机主要是2个方面,一个是随机选取特征,一个是随机样本。比如我们有N条数据,每条数据M个特征,随机森林会随机X条选取样本数据和Y个特征,然后组成多个决策树。

2.Bagging 的思想和算法流程

bagging即通过随机采样的方式生成众多并行式的分类器,通过少数服从多数的原则来确定最终结果。借鉴了一张图来说明下(来自刘建平Pinard):

这里我们要注意的一点是bagging采样后,是将采过的样本放回总样本集的,而boosting是不放的。

3.RandomForest特点

1) 训练可以高度并行化,对于大数据时代的大样本训练速度有优势。个人觉得这是的最主要的优点。

    2) 由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。

    3) 在训练后,可以给出各个特征对于输出的重要性

    4) 由于采用了随机采样,训练出的模型的方差小,泛化能力强。

    5) 相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。

    6) 对部分特征缺失不敏感。

    RF的主要缺点有:

    1)在某些噪音比较大的样本集上,RF模型容易陷入过拟合。

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

RF(随机森林)与GBDT之间的区别与联系

相同点

都是由多棵树组成,最终的结果都是由多棵树一起决定。

不同点

  • 组成随机森林的树可以分类树也可以是回归树,而GBDT只由回归树组成
  • 组成随机森林的树可以并行生成,而GBDT是串行生成
  • 随机森林的结果是多数表决表决的,而GBDT则是多棵树累加之和
  • 随机森林对异常值不敏感,而GBDT对异常值比较敏感
  • 随机森林是减少模型的方差,而GBDT是减少模型的偏差
  • 随机森林不需要进行特征归一化。而GBDT则需要进行特征归一化

2.RandomForestClassifier参数解释

先说下RandomForestClassifier这个模型算法是干啥用的,他最大的作用是分类预测

首先是官网

https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier

其次是方法

class sklearn.ensemble.RandomForestClassifier(n_estimators=100, *, criterion='gini', 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, class_weight=None, ccp_alpha=0.0, max_samples=None)

最后开始解释,还是挑重要的说

n_estimators :树的数量,默认是10,这个很好理解就是你准备在你的森林里种多少树。这个参数的大小决定了最后的准确性,但是也会让你的运行速度变的很慢,所以需要不断的测试去决定。

        max_features:随机森林允许单个决策树使用特征的最大数量。

Auto/None/sqrt :简单地选取所有特征,每颗树都可以利用他们。这种情况下,每颗树都没有任何的限制。默认是auto

int:是整数

float:百分比选取

log2:所有特征数的log2值

最主要的两个参数是n_estimators和max_features,n_estimators理论上是越大越好,但是计算时间也相应增长。所以,并不是取得越大就会越好,预测效果最好的将会出现在合理的树个数;max_features每个决策树在随机选择的这max_features特征里找到某个“最佳”特征,使得模型在该特征的某个值上分裂之后得到的收益最大化。max_features越少,方差就会减少,但同时偏差就会增加。如果是回归问题,则max_features=n_features,如果是分类问题,则max_features=sqrt(n_features),其中,n_features 是输入特征数

criterion : criterion:分裂节点所用的标准,可选“gini”, “entropy”,默认“gini”。

max_depth:树的最大深度。如果为None,则将节点展开,直到所有叶子都是纯净的(只有一个类),或者直到所有叶子都包含少于min_samples_split个样本。默认是None

 min_samples_split:拆分内部节点所需的最少样本数:如果为int,则将min_samples_split视为最小值。如果为float,则min_samples_split是一个分数,而ceil(min_samples_split * n_samples)是每个拆分的最小样本数。默认是2

min_samples_leaf:在叶节点处需要的最小样本数。仅在任何深度的分割点在左分支和右分支中的每个分支上至少留下min_samples_leaf个训练样本时,才考虑。这可能具有平滑模型的效果,尤其是在回归中。如果为int,则将min_samples_leaf视为最小值。如果为float,则min_samples_leaf是分数,而ceil(min_samples_leaf * n_samples)是每个节点的最小样本数。默认是1。

当确定了使用的模型,如果调整参数达到最优效果请看这里

调用的话就很简单了

rfMod = RandomForestClassifier(n_estimators=100, criterion='gini', max_depth=None, min_samples_split=2,min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto',max_leaf_nodes=None, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0)rfMod.fit(X_train,Y_train)

调用完后的属性

3.RandomForestClassifier属性解释

        estimators_ : 使用 -  rfMod.estimators_  , 拟合的子估计器的集合

classes_  :使用 -  rfMod.classes_  ,类别标签(单一输出问题),或者类别标签的数组序列(多输出问题)。

        n_classes_ :使用 -  rfMod.n_classes_ ,类别的数量(单输出问题),或者一个序列,包含每一个输出的类别数量(多输出问题)。

        n_features_ :使用 -  rfMod.n_features_ ,执行拟合时的特征数量。

n_outputs_ :使用 -  rfMod.n_outputs_ ,执行拟合时的输出数量。

feature_importances_ :使用 -  rfMod.feature_importances_ ,特征的重要性(值越高,特征越重要)。这个非常有用,可以看出特征的重要性。

oob_score_ :使用 -  rfMod.oob_score_ ,使用袋外估计获得的训练数据集的得分。

oob_decision_function_ :使用 -  rfMod.oob_decision_function_ ,在训练集上用袋外估计计算的决策函数。如果n_estimators很小的话,那么在有放回抽样中,一个数据点也不会被忽略是可能的。在这种情况下,oob_decision_function_ 可能包括NaN。

4.RandomForestClassifier方法

    get_params  :获取此估算器的参数,返回的是映射值的参数名

    predict ( X ):预测

        predict_log_proba ( X )
:输入样本的预测类别对数概率被计算为森林中树木的平均预测类别概率的对数。

 predict_proba ( X )
输入样本的预测类别概率被计算为森林中树木的平均预测类别概率。 单个树的类概率是叶中同一类的样本的分数。

score :返回均准确度

5.RandomForestRegressor参数、属性和方法

官网

https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html#sklearn-ensemble-randomforestregressor

方法调用

class sklearn.ensemble.RandomForestRegressor(n_estimators=100, *, 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, ccp_alpha=0.0, max_samples=None)

RandomForestRegressor是个回归方法,主要是做连续变量的预测,在数据处理补充连续变量缺失值的时候,用的比较多。

因为RandomForestRegressor和RandomForestClassifier的参数、属性和方法差不多都一样,主要介绍不一样的。

criterion 

目标函数一共2个,一个是均方误差mean squared error(MSE),另一个是绝对平均误差MAE(mean absolute error)

1)输入"mse"使用均方误差mean squared error(MSE),父节点和叶子节点之间的均方误差的差额将被用来作为特征选择的标准,这种方法通过使用叶子节点的均值来最小化L2损失,基本上都用这个
2)输入"mae"使用绝对平均误差MAE(mean absolute error),这种指标使用叶节点的中值来最小化L1损失。0.18版本之后加入的

值得一提的是,虽然均方误差永远为正,但是sklearn当中使用均方误差作为评判标准时,却是计算”负均方误差“(neg_mean_squared_error)。这是因为sklearn在计算模型评估指标的时候,会考虑指标本身的性质,均方误差本身是一种误差,所以被sklearn划分为模型的一种损失(loss),因此在sklearn当中,都以负数表示。真正的均方误差MSE的数值,其实就是neg_mean_squared_error去掉负号的数字。

参考:sklearn随机森林分类类RandomForestClassifier_w952470866的专栏-CSDN博客_randomforestclassifier

https://sklearn.apachecn.org/docs/master/12.html?h=RandomForestClassifier

机器学习-随机森林(RandomForest)详解相关推荐

  1. 随机森林的特征 是放回抽样么_机器学习超详细实践攻略(10):随机森林算法详解及小白都能看懂的调参指南...

    一.什么是随机森林 前面我们已经介绍了决策树的基本原理和使用.但是决策树有一个很大的缺陷:因为决策树会非常细致地划分样本,如果决策树分得太多细致,会导致其在训练集上出现过拟合,而如果决策树粗略地划分样 ...

  2. 【机器学习】红酒数据集和加利福尼亚的房价数据的随机森林算法详解

    一.随机森林 1.1随机森林的构建 bootstrap参数代表的是bootstrap sample,也就是"有放回抽样"的意思,指每次从样本空间中可以重复抽取同一个样本(因为样本在 ...

  3. 随机森林原理详解及python代码实现

    随机森林(RF)算法 1.算法原理 2.对数据的要求(无需规范化) 3.算法的优缺点 4.算法需要注意的点 5.python代码实现(待更......) 导入相关包 读取数据并预处理(必须处理缺失值) ...

  4. python随机森林 交叉验证_随机森林算法详解及Python实现

    一 简介 随机森林是一种比较有名的集成学习方法,属于集成学习算法中弱学习器之间不存在依赖的一部分,其因为这个优点可以并行化运行,因此随机森林在一些大赛中往往是首要选择的模型. 随机森立中随机是核心,通 ...

  5. scikit-learn中随机森林使用详解

      最近学了一下随机森林,本来想自己总结一下,但是觉得有一篇已经很好的博客,就给大家分享,我主要讲讲scikit-learn中如何使用随机森林算法.   scikit-learn中和随机森林算法相关的 ...

  6. R语言机器学习之caret包详解(一)

    R语言机器学习caret包trainControl函数详解 R语言机器学习之caret包详解(一) 简介 数据预处理 各种数据变换 近零方差变量 创建虚拟变量 重抽样技术 k折交叉验证 留一交叉验证 ...

  7. 【机器学习基本理论】详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解

    [机器学习基本理论]详解最大似然估计(MLE).最大后验概率估计(MAP),以及贝叶斯公式的理解 https://mp.weixin.qq.com/s/6H0gmMWvTExySMraroLVlQ 最 ...

  8. 【机器学习基本理论】详解最大后验概率估计(MAP)的理解

    [机器学习基本理论]详解最大后验概率估计(MAP)的理解 https://mp.weixin.qq.com/s/dQxN46wEbFrpvV369uOHdA 最大似然估计(Maximum likeli ...

  9. 基于spark mllib_Spark高级分析指南 | 机器学习和分析流程详解(下)

    - 点击上方"中国统计网"订阅我吧!- 我们在Spark高级分析指南 | 机器学习和分析流程详解(上)快速介绍了一下不同的高级分析应用和用力,从推荐到回归.但这只是实际高级分析过程 ...

最新文章

  1. zabbix 之 orabbix安装指导
  2. 笑一个阿 哈哈哈。。。。
  3. 什么是防火墙,真正意义上的防火墙
  4. 突破磁盘低级检测实现文件隐藏
  5. Namenode文件系统命名空间映像文件及修改日志
  6. 斯坦福大学机器学习第十课“应用机器学习的建议(Advice for applying machine learning)”
  7. eta 深度学习 参数_深度学习中的参数梯度推导(一)
  8. Spring常问的面试
  9. 异步编程Promise、Generator和Async
  10. mysql qps如何查看_mysql状态查看 QPS/TPS/缓存命中率查看
  11. mysql 刷新二进制日志_mysql binglog 二进制日志文件
  12. 中国产品在越南如何落地?
  13. 很清晰的解读i2c协议
  14. JS实现中文转拼音首字母和五笔简码
  15. 机电学生写给十年后自己的一封信
  16. 网络抖动多少ms算正常_网络延迟多少秒算正常
  17. 【Python】QQ大家来找茬辅助
  18. mmdetection使用
  19. JS 基础知识点与高频考题解析
  20. 文字识别模型MNIST

热门文章

  1. 最短路之——弗洛伊德算法(floyd)
  2. centos安装apache文件下载服务器
  3. Vue3在setup语法糖下的父子组件传值
  4. QT 定位 dmp 文件 错误
  5. Tomcat的环境配置
  6. 6.3.1 下载MySQL的DMG安装包
  7. 【Spring Cloud Alibaba Sentinel 实现熔断与限流】 —— 每天一点小知识
  8. 五大主流浏览器-简介
  9. 南京大学苏州校区,明年启用!
  10. JSP重定向和转发的区别