集成学习介绍——Random Forest

使用sklearn--Random Forest参数说明,随机森林调参数 使用sklearn--Random Forest参数说明(待补充) 资料来源:http://www.cnblogs.com/jasonfreak/p/5657196.html          ps:他/她写的好好        《机器学习》 周志华:第二章偏差与方差,第八章 0. 前言 sklearn提供了sklearn.ensemble库,其中包括随机森林模型(分类)。但之前使用这个... 阅读详情

随机森林是一个非常直观,理解起来也比较容易的Bagging算法。前面我们介绍过决策树,其最大的一个缺点就是容易过拟合。随机森林则是由若干决策树组成的模型,其思想就是“三个臭皮匠顶个诸葛亮”。比如下图,就是由9个决策树组成的一个随机森林,其中6个决策树预测值为1,三个预测为0 ,所以最终预测值取多数方:1。如果是回归问题,一般取所有决策树预测结果的均值。

理解随机森林的关键点在于理解“ 相关度低甚至不相关的多个决策树组合在一起的效果好于其中任何一个决策树 ”。这里拿一个例子做论证(注:此例来自第一个参考文章),做一个游戏:使用一个均匀分布的随机数产生器产生一个数字,如果这个数字大于等于40,则算你赢,可以获得一些钱;如果小于40,则算你输,你需要给对方同样数额的钱。现在有三种玩法供选择:

  • 玩法1(Game1):玩100次,每次的筹码是1元。
  • 玩法2(Game2):玩10次,每次筹码是10元。
  • 玩法3(Game3):玩1次,筹码是100.

你会怎么选哪一个?我们计算一下赢钱的期望值:

  • $E_1 = (0.6*1+0.4*(-1))*100=20$
  • $E_2=(0.6*10+0.4*(-10))*100=20$
  • $E_3=(0.6*100+0.4*(-100))=20$

三种选择赢钱的期望值是一样的,那到底该如何选?我们做一个模拟:每种情况都模拟10000次,代码如下:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_theme()

# Game 1
simulations = 10000  # number of Monte Carlo Simulations
games = 100          # number of times the game is played
threshold = 40       # threshold where if greater than or equal to you win
bet = 1              # dollar bet for the game

# outer loop is Monte Carlo sims and inner loop is games played
sim_results_1 = []
for sim in range(simulations):
    result = []
    for g in range(games):
        number = int(np.random.uniform()*100)  # get a random number to see who wins
        if number >= threshold:
            result.append(bet)
        else:
            result.append(-bet)
    sim_results_1.append(sum(result))          # sim_results_1 stores results for Game 1
print('Game 1 Mean: ', round(np.mean(sim_results_1), 2))
print('Game 1 Prob Positive: ', round(sum([1 for i in sim_results_1 if i>0])/simulations, 2))
print('\n')
    

# Game 2 (structure of code is same as above)
simulations = 10000
games = 10
threshold = 40
bet = 10

sim_results_2 = []
for sim in range(simulations):
    result = []
    for g in range(games):
        number = int(np.random.uniform()*100)
        if number >= threshold:
            result.append(bet)
        else:
            result.append(-bet)
    sim_results_2.append(sum(result))
print('Game 2 Mean: ', round(np.mean(sim_results_2), 2))
print('Game 2 Prob Positive: ', round(sum([1 for i in sim_results_2 if i>0])/simulations, 2))
print('\n')
    
    
# Game 3 (structure of code is same as above)
simulations = 10000
games = 1
threshold = 40
bet = 100

sim_results_3 = []
for sim in range(simulations):
    result = []
    for g in range(games):
        number = int(np.random.uniform()*100)
        if number >= threshold:
            result.append(bet)
        else:
            result.append(-bet)
    sim_results_3.append(sum(result))
print('Game 3 Mean: ', round(np.mean(sim_results_3), 2))
print('Game 3 Prob Positive: ', round(sum([1 for i in sim_results_3 if i>0])/simulations, 2))

# Histogram that shows the distribution of the Monte Carlo Results for 2 spending levels
fig, ax = plt.subplots(figsize=(8,6))
sns.distplot(sim_results_1, kde=False, bins=60, label='Play 100 Times')
sns.distplot(sim_results_2, kde=False, bins=60, label='Play 10 Times', color='orange')
sns.distplot(sim_results_3, kde=False, bins=60, label='Play 1 Time', color='pink')

ax.set_xlabel('Money Won by You', fontsize=16)
ax.set_ylabel('Frequency',fontsize=16)
plt.legend()
plt.tight_layout()

plt.savefig(fname='game_hist', dpi=150)
plt.show()

模拟的输出以分布图如下:

# 代码输出
Game 1 Mean:  20.01
Game 1 Prob Positive:  0.97

Game 2 Mean:  20.2
Game 2 Prob Positive:  0.63

Game 3 Mean:  21.08
Game 3 Prob Positive:  0.61

那可以看到赢钱的均值和即我们先前计算的期望值是一致的,三种玩法都接近20(Game x Mean),但赢钱的概率却相差很大,玩法1是97%,玩法2是63%,玩法3是61%。当然模拟次数再多一些,还有有一些变化。随机森林的思想和这个是一样的,里面包含的决策树的个数就是这里玩的次数。

另外,随机森林还有一个非常关键的限定条件:各个决策树之间不相关或者关联度很低。类比到上面的游戏中,我们的假设是产生随机数的算法是遵从均匀分布的,也就是产生1~100之间的数字的概率是完全相等的。如果不是,那上面第一种玩法1最优的结论就不一定成立了。而随机森林实现各个决策树之间不相关或者关联度很低是通过“ 两个随机 ”实现的:

  1. 数据随机 :即每次只选取原始数据集的一个子集作为一个决策树的训练集,一般就是自助采样法(Bootstrap)。这是最核心的随机,主要是去除或者削弱各独立模型之间的相关性。
  2. 属性随机 :属性随机化的好处在于让每个单独的基学习器不会过分关注在训练集中具有高度预测性或者描述性的特征。

通过两个随机,可以降低最终生成的模型的方差。而且通过这种方式生成的树一般也无需剪枝。Wikipedia上面的描述是这样的:

Each decision tree in the forest considers a random subset of features when forming questions and only has access to a random set of the training data points . This increases diversity in the forest leading to more robust overall predictions and the name ‘random forest.’

随机森林还有一个变种:Extra Trees。也称Extremely Randomized Trees,一般翻译为极限树,是随机森林的一个变种,进行了更彻底的随机,主要有两点:

  1. 训练各个决策树的时候使用全部数据集,而非一个采样的数据子集;
  2. 在选择决策树的拆分点的时候,均匀随机选择一个特征,而不是像随机森林那样根据信息增益或者基尼不纯度进行选择。

极限树的两个改动点在大部分情况下会进一步的降低方差,但可能会稍微增大一些偏差。

总结一下,随机森林的思路就是“群众的眼睛是雪亮的”,通过使用多个决策树组成一个“委员会”来进行预测或者回归,这些“群众”就是集成算法中的“若分类器”,他们相互之间没有关联度或者关联度低,而且一般在某一个点表现还可以。这点是通过“ 两个随机 ”去实现的,也是随机森林最核心的地方。

References:

模型并行及模型介绍 模型并行 阅读详情

相关推荐

Ensemble Learning——随机森林\极限森林\梯度提升树\GBDT

文章目录随机森林极限森林算法 API`class sklearn.ensemble.ExtraTreesClassifier(n_estimators=100, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1)` 随机森林 极限森林 算法 API class sklearn.ensemble.Ext...

cygnet477的博客 1684

模型融合---ExtraTree(极限树)总结

随机森林:是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。随机森林对回归的结果在内部是取得平均但是并不是所有的回归都是取的平均,有些是取的和。 随机森林里的随机 极限树/极端随机树里的随机 样本随机特征随机参数随机模型随机(ID3 ,C4.5) 特征随机参数随机模型随机(ID3...

dili8870的博客 1万+

常见的机器学习算法(十)决策树、随机森林、极限树

直接调用sklearn的API: from sklearn import tree #决策树分类器# module = tree.DecisionTreeClassifier(criterion='gini') module.fit(x, y) module.score(x, y) module.predict(test) from sklearn.datasets import load_iris from sklearn.tree .

是鲤鱼啊 1670

特征选择

特征选择方法介绍

coffee_cream的博客 1万+

集成学习(Ensemble)算法介绍

Ensemble Model Bagging和Boosting都算是Bootstraping的应用。Bootstraping的概念是对样本每次有放回的抽样,抽样K个,一共抽N次。 Bagging:每次从总体样本中随机抽取K个样本来训练模型(有放回),重复N次,得到N个模型(++独立构建++),然后将各个模型结果合并,分类问题投票方式结合,回归则是取平均值,e.g.Random Forest。...

haoran_yang的博客 2774

随机森林(Random Forest)原理小结

随机森林(Random Forest)原理小结1. bagging2. 随机森林(RF)2.1 RF 分类2.2 特征重要性2.3 RF 回归3. 模型评价4. 参考 接着上一章节的决策树模型,接下来会介绍一些基于决策树的,具有代表性的集成模型,如随机森林(RF),GBDT,XGBoost以及lightGBM。 本章主要介绍随机森林(Random Forest,简写RF),RF是bagging集成模型的扩展变体,所以前面会简要介绍一些关于bagging的内容,后面会有专门的“集成学习”的章节来重点介绍bag

小白的专栏 1万+

通俗解读随机森林Random Forest

通俗解读随机森林Random Forest1. 什么是集成学习2. 什么是Bagging3 随机森林 1. 什么是集成学习 集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被成为多分类器系统(multi-classifier system)、基于委员会的学习(committee-based learning)。 简单来说,就是对于一个分类问题,我同时训练三个分类器。假如我用简单的“投票法”来产生结果的话,那么当分类器1分类结果为1,分类器2分类结果也为1,而分类器

夏之微风的博客 2770

树模型系列之集成树(Random Forest、Adaboost、GBDT)

GBDT原理与Sklearn源码分析-分类篇 GBDT原理与实践-多分类篇 GBDT原理与Sklearn源码分析-回归篇 机器学习算法中 GBDT 和 XGBOOST 的区别有哪些? https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf XGBoost原理和底层实现剖析 《统计学习方法》第8章 提升方法之AdaBoost\Boost...

召唤师的峡谷 2755

Ensemble learning:Bagging,Random Forest,Boosting

概述\qquad集成学习(ensemble learning)构建多个基础的分类器,然后将多个分类器进行组合的一种学习方式。其通常也被称为多分类器系统(multi-classifer system)。下图显示了集成学习的一种普遍的方式:\qquad从图中可以看到,首先从原始的数据集中构造多个数据集,然后分别构造单个分类器,最后将这些分类器进行组合的到组合的分类器。\qquad一个很自然的问题:为什么

yqtao的博客 4495

TL431过压保护电路实战:5.5V阈值设计全流程(附MOSFET选型建议)

本文详细介绍了基于TL431和MOSFET构建5.5V阈值过压保护电路的完整设计流程。内容涵盖核心原理、阈值计算、驱动电路设计,并重点针对大电流应用场景,提供了MOSFET选型与散热处理的实战建议,帮助工程师打造可靠高效的电源保护方案。

weixin_28327051的博客 535

nnU-Net v2实战:从零开始配置环境与训练自定义医学影像数据集

本文详细介绍了nnU-Net v2在医学影像分割中的实战应用,从环境配置到自定义数据集训练的全流程。重点讲解了Python 3.9+环境搭建、PyTorch安装技巧、医学影像数据预处理规范,以及五折交叉验证训练方法,帮助开发者快速掌握这一先进的医学影像分析工具。

weixin_28718487的博客 352

集成学习-详细总结

一. 集成学习的概念与主要类型 1.1 集成学习的概念与意义 1.2 主要类型与差别 二. 简单的集成方法 三. Boosting 四. Bagging 五. Stacking 六. Random Forest 七. GBDT

一只星期八 3579

从零到精通:ROS2 MoveIt2与MPC机械臂轨迹规划的完整配置流程

本文详细介绍了ROS2 MoveIt2与MPC机械臂轨迹规划的完整配置流程,从环境准备到高级功能扩展,帮助开发者实现精准控制。通过集成模型预测控制(MPC),机械臂能够优化复杂轨迹规划,处理动态避障,提升工业自动化效率。

juice的博客 705

scikit-learn中集成学习(ensemble learn)的例子与实践

在我的上一篇博客中集成学习基本原理:Adaboost,Bagging和Stacking介绍了一些集成学习的基本原理,所以在这一篇我准备介绍一下scikit-learn中的一些例子,在官方文档中集成学习的例子很多,我当然不可能全部写在博客里面,在这里我只挑一些典型的大致讲一下。AdaBoostimport numpy as np import matplotlib.pyplot as pltfrom

leonliu1995的博客 3254

告别复杂配置:利用原生DDNS实现IPv6直连群晖的极简指南

本文详细介绍了如何利用原生DDNS实现IPv6直连群晖NAS的极简方法,告别复杂配置。从检查IPv6网络环境、路由器防火墙设置到群晖DDNS配置,一步步指导用户完成设置,并分享移动网络下的使用体验和安全防护建议,帮助用户轻松实现远程访问。

weixin_30918633的博客 413

Win11用户文件夹中文名修改全攻略

本文详细介绍了Windows 11系统中修改中文用户文件夹名称的完整步骤。操作包含七个关键环节:前期数据备份、账户名称修改、管理员账户激活、用户文件夹重命名、注册表路径更新、收尾操作及注意事项。特别强调需要同步修改账户名、文件夹名和注册表关联路径,并建议操作前备份重要数据。文中还针对常见问题提供了解决方案,如软件报错时的符号链接创建方法。整个过程需谨慎操作,建议在管理员权限下逐步执行,修改完成后需验证系统及软件功能是否正常。

Qinti_mm的博客 3122

集成学习实战之 -- RandomForest

集成学习实战之 -- RandomForest一、引入1.Linear modela.用线性模型拟合非线性数据:1)拟合较平滑的曲线2)拟合不规则曲线2.引入决策树a.两个问题1)决策树是线性模型吗?2)决策树能解决上面的问题吗?b.决策树的特点c.拟合数据二、模型融合1.Bagging2.Random Foresta.手动构建a.用sklearn中的模型构建 一、引入 1.Linear mode...

qq_42231980的博客 623

RK3568 MIPI屏幕启动异常:从uboot logo到黑屏的排查与修复

本文详细分析了RK3568平台MIPI屏幕在启动过程中,从uboot阶段正常显示logo到内核阶段黑屏的典型故障。通过硬件测量与软件调试,最终定位问题根源在于电源时序,并提供了在设备树中为屏幕供电的regulator节点添加`regulator-boot-on`属性的关键解决方案,有效解决了因内核启动早期电源管理导致的显示异常。

weixin_29161719的博客 540

分类器:Cart,bagging,random forest boosting

本文从统计学角度讲解了CART(Classification And Regression Tree), Bagging(bootstrap aggregation), Random Forest Boosting四种分类器的特点与分类方法。 CART(Classification And Regression Tree)          Breiman, Fri

junnan321的专栏 1286

RK3588 buildroot 双网口bonding调试

本文介绍了Rockchip Buildroot中配置网络冗余的方法,通过bonding技术将多个物理网口合并为逻辑接口。主要内容包括:1)7种常见bonding模式的特点及适用场景;2)RK3588的具体配置流程,包括内核配置(启用bonding驱动、修改dts)、添加ifenslave工具;3)系统编译和网络状态检查。

501846585_QQAndroid_java 458

FC7300 SPI MCAL配置引导

Example - QMI8A01z外设:Example - QMI8A01z外设:

舊梦的博客 257

知识总结: decision Tree, Bagging, Random Forest, Boosting

本文引用大量网上文章内容,因为时间久远,无法一一列出出处,本文目的纯粹知识总结.如对文章内容有异议,请联系作者本人. 1. Decision Tree 定义就省略了,有ID3 ,CART, C4.5 等变种, 算法大同小异,主要区别的是: ·        the splitting criterion (i.e., how "variance" isca

小松的笔迹 1298

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

集成学习分类和区别

集成学习 1.1 定义 所谓集成学习(ensemble learning),是指通过构建多个弱学习器,然后结合为一个强学习器来完成分类任务。并相较于弱分类器而言,进一步提升结果的准确率。严格来说,集成学习并不算是一种分类器,而是一种学习器结合的方法。 下图显示了集成学习的整个流程:首次按产生一组“个体学习器”,这些个体学习器可以是同质的(homogeneous)(例如

chengfulukou的博客 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Random Forest、Adaboost、GBDT

将多个弱监督模型组合,以产生更好的效果(帮助集成模型降低预测的偏差或者方差)。常见的集成学习框架有三种:Bagging,Boosting 和 Stacking。

2403_87661576的博客 534

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

diabetes数据集_数据分析模型11——机器学习兵器中的大杀器:集成学习算法(ENSEMBLE METHODS)...

今天我们来学习机器学习中的一个重量级的武器,集成学习算法。基本上集成学习法是一个多分类器整合方法,传统的机器学习模型只会建立一个分类器,集成学习法通过构建多个分类器,对多个分类器的预测结果进行聚合,提高分类精度。集成方法根据训练数据构造一组基分类器,并通过对每个基分类器的预测进行投票来进行分类。未经许可请勿转载更多数据分析内容参看这里一、基本概念下面我们看一下集成学习算法的过程。原始的训练数据,通...

weixin_39974400的博客 662

机器学习——Boosting、提升树、随机森林(Random Forest)学习笔记

大数据工作室学习打卡 第 N 次 一、Boosting(提升) 1.什么是集成学习? 首先,我们得先了解什么是集成学习,集成学习是一种通过组合弱学习器来产生强学习器的通用且有效的方法,简单来说,就是通过训练多个分类器,然后将其组合起来,从而达到更好的预测性能,提高分类器的泛化能力。 如下图: 2.什么是boosting(提升)? boosting和集成学习什么关系? 前面我们了解了集成学习,那么集成学习的关键就在于如何组合多个弱学习器,所以依次发展出了三大主要框架: bagging boosting s

EMIvv的博客 2892
上一篇: Python面试,这16个问题你一定要熟知
下一篇: 【Python自动化Excel】Python与pandas字符串操作
老贡讲Python
博客等级 码龄5年 525粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值