随机森林(random forest)模型原理及sklearn实现

机器学习中Random Forest 随机森林小结(5步算法,11个优缺点,例子演示解决Kaggle高频竞赛题泰坦尼克沉船) 随机森林属于 集成学习 中的 Bagging方法。由多个随机树构成,然后通过投票共同学习特征。 因为生长很深的树容易学习到高度不规则的模式,即overfit,在训练集上具有低bias和高variance的特点。随机森林是平均多个深决策树以降低variance的一种方法,其中,决策树是在一个数据集上的不同子集进行训练的,在最终的模型中通常会大大提高性能。 这有些像解决一道预测何时世界末日的难题,你给一个大学生解决,又给了一个在家里自学的人解决。两个人的解法很大概率是不一样的,你提取两个人解法的优势合起来就 阅读详情

本文的主要内容是基于Python机器学习基础教程决策树部分进行整理和总结。

目的

决策树的主要缺点在于,即使做了剪枝处理,也会出现过拟合的情况,泛化能力相对而言并不高,为此,在大多数的应用中,往往使用集成(ensemble)方法来代替单棵决策树。集成是合并多个机器学习模型来构建更强大模型的方法,目前已经证明随机森林(random forest)作为决策树集成方法对大量分类和回归的数据集都是有效的。

思想

随机森林本质上是许多决策树的集合,,其中每棵树都和其他树有所不同,随机森林的思想在于,保证每棵树的预测都是相对较好的,但是可能对部分数据存在过拟合的情况,我们可以通过构造很多树,并且构造的树都是以不同的方式过拟合,那么我们可以对这些树的结果取平均来降低过拟合。

策略

那么要如何才能保证每棵树有很好的预测并且各有不同呢?随机森林的名字来自于将随机性添加到树的构造过程中,以确保每棵树各有不同,随机森林的随机化方法有两种:

  • 通过选择构造书的数据点,实现的方法叫做随机采样(booststrap sample),从n_samples个数据点中有放回的重复抽取一个样本,并且抽取n_samples次,也就是说每个数据点是会被多次抽取的,有的数据点可能一次也不会被抽到(通过数学证明这类样本占到1/3),这样就会生成一个数据点数量和原数据集数量相同的样本集合;

  • 通过选择每次划分测试的特征:仅使用随机采样的方法生成随机森林的方法是不够的,我们还需要针对决策树在每个节点处随机算则特征集合的一个子集,在sklearn中,算则的特征个数由max_features参数控制,每个节点中特征子集的选择是相互独立的,这样树的节点可以使用特征的不同子集进行决策。

由此可知,随机森林中构造每棵决策树的数据集都是稍有不同的,同时由于每个节点的特征选择,每棵树的每次特征划分都是基于特征的不同子集,这两种方法共同保证随机森林中所有树都不相同。

sklearn实现与可视化分析

使用5棵树组成的随机森林应用到two_moons数据集上。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_moons
X,y = make_moons(n_samples=100,noise=0.25,random_state=3)
X_train,X_test,y_train,y_test = train_test_split(X,y,stratify=y,random_state=42)
forest = RandomForestClassifier(n_estimators=5,random_state=2)
forest.fit(X_train,y_train)

作为随机森林的一部分,树被保存在estimator_属性中,我们将每棵树学到的决策树边界可视化,也将它们的总预测(即整个森林做出的预测)可视化。

fig,axes = plt.subplots(2,3,figsize=(20,10))
for i,(ax,tree) in enumerate(zip(axes.ravel(),forest.estimators_)):
    ax.set_title("Tree {}".format(i))
    mglearn.plots.plot_tree_partition(X_train,y_train,tree,ax=ax)
    
mglearn.plots.plot_2d_separator(forest,X_train,fill=True,ax=axes[-1,-1],alpha=.4)
axes[-1,-1].set_title("random_forest")
mglearn.discrete_scatter(X_train[:,0],X_train[:,1],y_train)

在这里插入图片描述
从训练结果可以看出,生成的5棵决策树决策边界各不相同,每棵树也都多多少少犯了一些错误,因为由于自助采样,一些训练点实际上并没有包含在训练集中。
随机森林的结果比单独每棵树的过拟合都要小,给出的决策边界也更加符合直观感受,在任何使用应用中,我们都会用到更多的树(几百乃至上千),从而得到更平滑的边界。
在这里插入图片描述
现在我们将100棵树的随机森林应用到乳腺癌的数据中

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import mglearn
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
X_train,X_test,y_train,y_test = train_test_split(cancer['data'],cancer['target'],random_state=0)
forest = RandomForestClassifier(n_estimators=100,random_state=0)
forest.fit(X_train,y_train)

print("Accuracy of train set {:.3f}".format(forest.score(X_train,y_train)))
print("Accuracy of test set {:.3f}".format(forest.score(X_test,y_test)))
Accuracy of train set 1.000
Accuracy of test set 0.972

可以发现,在没有调节任何参数的情况下,随机森林的精度为97%,比线性模型或单棵决策树都要好,我们可以调节max_features参数,或者像单棵树那样进行预剪枝,但是一般情况下,随机森林的默认参数就能给出很好的结果。
给出随机森林的特征重要性直方图,随机森林特征重要性相比单棵决策树也会更加可靠。

def plot_feature_importances_cancer(model):
    n_features = cancer.data.shape[1]
    plt.barh(range(n_features),model.feature_importances_,align='center')
    plt.yticks(np.arange(n_features),cancer.feature_names)
    plt.xlabel('Feature importance')
    plt.ylabel("Feature")

plot_feature_importances_cancer(forest)

在这里插入图片描述

模型评价

  • 用于回归和分类的随机森林是目前应用最广泛的机器学习方法之一,通常不需要反复调节参数就能得到很好的结果,也不需要对数据进行缩放(如归一化或标准化);
  • 随机森林拥有决策树的所有优点,同时弥补了决策树的一些缺陷,森林中的树越多,他对随机状态选择的鲁棒性也会越好;
  • max_features决定了每棵树的随机性大小,较小的max_features可以降低过拟合,对于分类,默认值是max_features=sqrt(n_features),对于回归,默认值是max_features=n_features,增大max_features或max_leaf_nodes有时也会提高性能;
  • 对于维度非常高的稀疏矩阵(如文本数据),随机森林的表现往往不是很好,对于这种数据,线性模型可能会更合适一些;
随机森林模型及案例(Python) 1 集成模型简介 集成学习模型使用一系列弱学习器(也称为基础模型或基模型)进行学习,并将各个弱学习器的结果进行整合,从而获得比单个学习器更好的学习效果。 集成学习模型的常见算法有Bagging算法和Boosting算法两种。 Bagging算法的典型机器学习模型为随机森林模型,而Boosting算法的典型机器学习模型则为AdaBoost、GBDT、XGBoost和LightGBM模型。 1.1 Bagging算法简介 Bagging算法的原理类似投票,每个弱学习器都有一票,最终根据所有弱学习器的投 阅读详情

相关推荐

机器学习模型系列:随机森林的原理和示例介绍

让我们总结一下与其他监督式机器学习模型相比,随机森林的优缺点。优点在许多真实数据集上已知能提供高度准确的模型。通过结合多个决策树的预测,可以捕捉数据集中的复杂交互和模式。通过自动选择相关特征,可以有效处理高维数据集。与单个决策树相比,不容易过拟合。自助采样和每个节点的随机特征选择有助于减少过拟合并改善泛化能力。可以处理包括数值和分类特征在内的异构数据类型。可以处理缺失值而不需要填充。提供特征重要性的度量。集成中的树可以并行训练,因为每个决策树可以独立构建。模型的泛化误差具有理论上的界限。

数智笔记 1万+

随机森林模型

如下图所示,随机森林模型会在原始数据集中随机抽样,构成n个不同的样本数据集,然后根据这些数据集搭建n个不同的决策树模型,最后根据这些决策树模型的平均值(针对回归模型)或者投票(针对分类模型)情况来获取最终结果。举例来说,有1000个原始数据,有放回的抽取1000次,构成一组新的数据(因为是有放回抽取,有些数据可能被选中多次,有些数据可能不被选上),作为某一个决策树的数据来进行模型的训练。随机森林是一种元估计器,它在数据集的不同子样本上匹配许多决策树分类器,并使用平均来提高预测精度和控制过拟合。

m0_62224692的博客 2万+

Random Forest面试深度指南:原理、工程陷阱与业务权衡

随机森林(Random Forest)作为集成学习的经典算法,其核心在于通过Bagging降低方差、结合特征随机化削弱树间相关性,从而实现稳健的泛化能力。理解其OOB误差机制、偏差-方差分解逻辑及特征重要性计算原理,是掌握模型行为的基础;而真实工程中面临的内存爆炸、高维稀疏特征失效、缺失值处理边界、SHAP可解释性落地等挑战,恰恰构成技术深度的分水岭。尤其在金融风控、用户流失预测、IoT异常检测等强业务约束场景下,RF与XGBoost/LightGBM的选型不再仅看AUC,更需权衡实时性SLA、合规审计要求

weixin_29901799的博客 351

sklearn基础篇(七)-- 随机森林(Random forest)

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

CarpeDiem 1万+

机器学习入门:随机森林(Random Forest)

本文是"机器学习入门"系列的第五站。在上一站中,我们深入学习了**决策树**,明白了它是一棵通过"如果……那么……"规则进行分类的白盒模型。但单棵决策树往往有一个致命的弱点——容易过拟合,且对数据的扰动非常敏感。那么,如果我们种下一片森林,让多棵树一起投票表决呢?这就是今天的主角:随机森林(Random Forest)。它汇聚众树之所长,大幅提升了模型的准确率和稳定性。

2301_79882046的博客 602

利用docx4j与docx4j-ImportXHTML高效实现HTML到Word的自动化转换

本文详细介绍了如何利用docx4j与docx4j-ImportXHTML库,在Java环境中高效实现HTML到Word文档的自动化转换。内容涵盖从环境搭建、核心依赖配置,到集成Spring Boot REST API的完整实战流程,并深入解析了处理图片、CSS样式、字体设置以及使用模板保证样式统一等高级技巧与常见问题解决方案,帮助开发者构建稳定的文档自动化生成流水线。

cnn8visionary的博客 366

随机森林原理详解 random forest 代码+参数讲解

事实上随机森林的基本单元决策树很早就被提出来了,只不过单个决策树效果不好。这个情况和神经网络差不多。 到了2001年Breiman把分类树组合成随机森林(Breiman 2001a),即在变量(列)的使用和数据(行)的使用上进行随机化,生成很多分类树,再汇总分类树的结果。在运算没有增加的情况下,精度提高了不少。 进入正题 随机森林由两个部分组成 随机 和 森林 森林简单来说就是很多颗树,而这个树...

lianyhai 1万+

【比较器仿真】

比较器tran noise、pnoise仿真、噪声仿真、MC失调仿真

pickweb的博客 1万+

随机森林(Random Forest)学习笔记

0 声明 本文主要内容来自视频 '【2020机器学习全集】菜菜的sklearn完整版,价值4999元的最全机器学习sklearn全集,赶紧收藏_哔哩哔哩_bilibili' 以及视频课件“https://pan.baidu.com/s/1Xl4o0PMA5ysUILeCKvm_2w,提取码:a967”。 本文是一个学习笔记,不是一篇帮助新人入门的文章,其内容主要针对本人的薄弱环节,没有面面俱到,不一定适用所有人。 本文主要介绍了集成算法的概念、使用sklearn实现随机森林的重要参数、属性以及方法、.

liuqihang11的博客 7104

【万字长文】学习Armv8架构虚拟化一篇就够了

这里我们将介绍一些基础的Hypervisor和虚拟化的理论知识。如果你已经有一定的基础或是已经熟悉了这些概念,可以跳过这部分内容。我们用Hypervisor这个词来定义一种负责创建,管理以及调度虚拟机(Virtual Machines, VMs)的软件。Stage 2 转换允许Hypervisor控制虚拟机的内存视图。具体来说,其可以控制虚拟机是否可以访问特定的某一块物理内存,以及该内存块出现在虚拟机内存空间的位置。这种能力对于虚拟机的隔离和沙箱功能来说至关重要。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 5315

告别Overleaf!本地LaTeX环境配置:VSCode+TeXLive完全指南(Windows/Mac双平台)

本文详细介绍了如何在Windows和Mac平台上配置本地LaTeX环境,使用VSCode和TeXLive打造高效的专业写作工作流。从TeXLive安装到VSCode插件配置,再到高级技巧与性能优化,帮助用户摆脱Overleaf限制,实现更快速、更私密的学术写作体验。

3c4x5z6v7b的博客 952

《Sklearn 机器学习模型--分类模型》--决策树与随机森林(Decision Tree & Random Forest)

随机森林通过多样性增强与误差平均策略,在多数任务中显著优于单棵决策树,尤其适合数据噪声多、特征维度高的场景。尽管牺牲了部分可解释性,但其自动化特征选择、处理缺失值的能力使其成为工业界与学术界的通用基线模型。对于追求极致性能的场景,可进一步尝试梯度提升树(如XGBoost、LightGBM)。

m0_71002812的博客 2194

UNSW-NB15数据集:网络流量分析与恶意攻击检测实战指南

本文提供了UNSW-NB15数据集在网络流量分析与恶意攻击检测领域的实战指南。详细介绍了该数据集的构成、核心特征解析、特征工程处理、机器学习模型训练与评估方法,并探讨了模型部署及持续优化的挑战与思路,帮助读者构建高效的网络攻击检测系统。

weixin_29193359的博客 258

【集成学习系列教程6】随机森林Random Forest原理及sklearn应用

2 Bagging 2.1 概述 前面我们介绍了集成学习中的一大类算法——Boosting算法,它利用基学习器之间的相关性,通过串行地生成多个新的基学习器,获得最终的强学习器,是一种非常具有代表性的“串行集成方法”。而集成学习方法中还有另一大类算法——Bagging算法,它利用的是基学习器之间的独立性,通过结合多个相互独立的基学习器,从整体上显著减小拟合的误差,是一种非常具有代表性的“并行集成方法”。本节就将对Bagging方法进行详细的介绍。 2.2 算法介绍 Bagging的全称为Bootstrap A

qq_42554780的博客 1925

当LightGBM推理遇上GPU:3种替代方案性能对比(含ONNX实战代码)

本文针对LightGBM官方不支持GPU推理的性能瓶颈,深度评测了RAPIDS cuML、ONNX Runtime GPU和Triton Inference Server三种GPU加速推理替代方案。通过详尽的性能对比和实战代码,为高并发、低延迟的在线预测场景提供了清晰的选型指南,帮助工程师打破推理性能枷锁,实现显著的吞吐量提升。

salt9的博客 813

【2026年米哈游春招 - 3月14日 -第一题- 行列相等】(题目+思路+Java&C++&Python解析+在线测试)

摘要 本文解决了一个矩阵行列和匹配问题:统计矩阵中行和等于列和的所有行列对数量。算法首先计算每行和每列的元素和,然后利用哈希表统计各行列和的出现次数。通过遍历列和并查询对应的行和出现次数,高效计算出匹配对数。该方法时间复杂度为O(nm),空间复杂度为O(n+m),适用于大规模矩阵数据。代码实现了Python、Java和C++版本,通过哈希表优化避免了暴力枚举,显著提高了计算效率。

m0_73659489的博客 83

随机森林在sklearn中的实现

小伙伴们大家好~o( ̄▽ ̄)ブ,我是菜菜,我的开发环境是Jupyter lab,所用的库和版本大家参考: Python 3.7.1(你的版本至少要3.4以上 Scikit-learn 0.20.0 (你的版本至少要0.19 Numpy 1.15.3, Pandas 0.23.4, Matplotlib 3.0.1, SciPy 1.1.0 1 概述 1.1 集成算法概述 集成学习(ensemble...

CDA数据分析师 2895

高效批量转换Java接口为MCP服务:降低重复劳动的实战指南

高效批量转换Java接口为MCP服务:降低重复劳动的实战指南

专注于编程、AI、人工智能等多个领域内容研究和分析 725

机器学习算法[6]--集成方法之随机森林原理详解及sklearn实现

对机器学习算法-随机森林进行总结,包括原理详解和sklearn的实现

Gthan 1797

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

随机森林(Random Forest)(RF)

随机森林就是多棵决策树在一起组成的森林,就是多个决策树执行民主决策的过程。

weixin_48539970的博客 1939

VB摄像头监控

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

sklearn_随机森林random forest原理_乳腺癌分类器建模(推荐AAA)

sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share Toby,项目合作Q...

weixin_30337251的博客 1530

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

机器学习 - 随机森林(Random Forest)

Random Forest 当我们在阅读Kaggle之类竞赛的相关方案时,GDBT和Random Forest绝对是两个最为常见的机器学习算法。随机森林(Random Forest,RF)属于集成算法中Bagging(Booststrap aggregating)中一个重要的组成部分,Bagging的核心思想在于从总体样本中随机选取一部分进行训练,通过多次这样的结果进行投票获取平均值作为结果输...

Forlogenの解忧杂货铺 4691

Spark 和 Python.sklearn:使用随机森林计算 feature_importance 特征重要性

前言 数据:美国某公司的共享单车数据 数据源:http://archive.ics.uci.edu/ml/machine-learning-databases/00275/ 图源:https://blog.youkuaiyun.com/wuxintdrh/article/details/90729963 pySpark代码 from pyspark.sql import S...

Puzzle的博客 1万+

sklearn笔记整理——(三)随机森林(random forest)

随机森林官网说明: https://scikit-learn.org/stable/modules/ensemble.html#forests-of-randomized-trees 算法原理 随机森林属于集成算法的一种,基于bagging集成算法。所有基评估器都是决策树。sklearn中随机森林包括随机森林分类与随机森林回归。另外官网也提供了超树(ExtraTreesClassifier)等接口,并且从案例来看,拟合效果也很优越。超树比随机森林还要随机, 优势与劣势 一般来说,随机森林的效果要好于单棵决策

晴空 1888

sklearn中Random Forest参数调优

转自:http://www.cnblogs.com/pinard/p/6160412.html 在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结。本文就从实践的角度对RF做一个总结。重点讲述scikit-learn中RF的调参注意事项,以及和GBDT调参的异同点。 scikit-learn随机森林类库概述     在sci...

KongQueenie的博客 2万+
上一篇: numpy的梯度函数np.gradient(f)
下一篇: 梯度提升回归树(GBDT)
June �
博客等级 码龄8年 10粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值