Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >随机森林算法通俗易懂(改进的随机森林算法)

随机森林算法通俗易懂(改进的随机森林算法)

作者头像
全栈程序员站长
发布于 2022-07-30 04:28:01
发布于 2022-07-30 04:28:01
2.1K02
代码可运行
举报
运行总次数:2
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

前面几篇我们探讨了决策树算法集成学习方法,今天我们就来探讨下基于bagging集成的决策树算法——随机森林(Random Forest)。随机森林虽然简单,但它是最强大的机器学习算法之一,也是实际应用中非常常用的算法之一,是我们必须要掌握的算法。 首先让我们简单的回顾下决策树算法,因为它是随机森林的基础。

1)决策树

决策树最大的特点就是直观,易解释。大家生活中在某一个时刻也在无意或有意的使用它,比如我们之前举的借钱的栗子。 决策树算法根据特征选择的方式不同,可以分为ID3算法,C4.5算法,CART算法。在CART算法中,使用Gini指数做特征选择,选择Gini指数最小的特征以及其对应的切分点作为最优特征与最优的切分点,循环反复直到满足停止条件。 由于决策树几乎不对训练数据做任何的假设,在不添加任务约束,树结构将会根据训练数据的特性自由生长,达到百分百的正确率。为了提高决策树的泛化能力,决策树使用了剪枝的方法。但是剪枝在减少模型方差的同时,也减小了模型的偏差(准确度)。那么有没有其他方法,在降低模型方差的同时,又不降低显著降低模型偏差?非常巧,上一篇我们提到的bagging集成方法正好有这个特性。 使用bagging集成多颗决策树(CART树)就叫做随机森林。

2)随机森林

我们在上篇在探讨bagging集成学习方法时,提到bagging集成方法有效的前提条件是,基模型之间必须保持低相关性,低相关性才能保证基模型之间的差异性,有差异性的基模型组合在一起才能成为一个更强大模型。 为了让CART树有更大差异性,随机森林除了对样本进行随机过采样,增加训练集的随机性之外,还在树的生成时引入了额外的随机,即特征随机。在树的生成时,选择随机采样的特征中的最好的特征作为分裂节点,这样使得每棵树有更大的差异性。

下面我们总结下随机森林的算法过程: 输入:数据量为 m m m的训练集 D D D, T T T颗CART树 输出:最终的随机森林 f ( x ) f(x) f(x) 1)对训练集 D D D进行 m m m次随机过采样,得到样本量为 m m m的采样集 D s a m p l e D_{sample} Dsample​; 2)在所有属性特征中随机选择 k k k个属性特征,选择最佳分割属性特征作为节点构建CART树 T ( x ) T(x) T(x); 3)重复以上两步 T T T次,即建立了 T T T颗决策树; 4)这 T T T颗决策树组成随机森林。如果是分类算法预测,则通过投票表决数据最终属于哪一个类别;如果是回归预测,则 通过平均作为最终模型的输出。

4)Out of Bag评价

对于Bagging,采用有放回的采样,那么一些样本可能被多次重复采样,有一些可能不会被采样。对于一个大小为 m m m的训练集进行随机采样,样本每一次被采样的概率为 1 m \frac{1}{m} m1​,没有被采样到的概率为 1 − 1 m 1-\frac{1}{m} 1−m1​, m m m次都没有被采样到的样本的概率为 ( 1 − 1 m ) m {(1-\frac{1}{m})}^m (1−m1​)m,当 m → ∞ m\rightarrow \infty m→∞时, lim ⁡ m → + ∞ = 1 e ≈ 0.368 {\lim_{m \to +\infty}}=\frac{1}{e}\approx0.368 limm→+∞​=e1​≈0.368 也就是说,对于大小为 m m m的训练集,平均只有63.2%的样本被每个分类器采样,剩余的36.8%没有被采样到,没有被采样的样本被称为Out of Bag。 注意,每个分类器的36.8%的样本是不一样的。由于分类器在训练的时候没有使用到Out of Bag的样本数据,因此这部分可以用来评估分类器,进而不需要另外划分验证集或者做交叉验证了。在sklearn随机森林库类中,你可以通过oob_score=True来自动评估,评估结果通过oob_score_查看,具体我们下篇再探讨。

3)随机森林的其他应用

随机森林除了做正常的分类与回归预测,还可以使用到其他的一些场景。

  • 计算特征重要性 使用随机森林计算特征的重要性应该是我们使用的最多的一个场景了。计算特征重要性的指标有很多,可以使用经过特征节点的样本比例、特征节点的纯度减少、特征在随机森林所有的树中的平均深度、或者随机更换一些特征,重新建立决策树,计算新模型的正确率的变化。scikit-learn中随机森林库类通过将特征贡献的样本比例与纯度减少相结合得到特征的重要性。
  • 异常值检测——Isolation Forest 使用随机森林也可以做异常值检测。原理为,计算所有树中每一个样本从根到叶子的距离总和 D ( x ) D(x) D(x),如果样本为异常值,它应该在大多数树中很快就能从根到达叶子,即D(x)较小。
  • 计算样本的相似度 使用随机森林还可以计算样本的相似度。原理为,如果两个样本同时出现在相同的叶节点的次数越多,则二者越相似。

4)总结

下面我们对随机森林算法的优缺点做一个总结。

随机森林的主要优点:

  • 支持并行处理;
  • 不需要对特征进行标准化处理;
  • 不需要对特征缺失值进行处理;
  • 模型较稳定,泛化能力强;
  • 模型可以输出特征重要性;
  • 使用Out of Bag,不需要单独划分测试集;

随机森林的主要缺点:

  • 由于有多个基模型组合而成,模型不易解释;
  • 树较多时,训练时间比较久;

随机森林是非常强大的算法,可以作为我们做分类任务首要尝试的算法。

(欢迎大家在评论区探讨交流,也欢迎大家转载,转载请注明出处!) 上篇:集成学习方法之Bagging,Boosting,Stacking 下篇:Scikit-learn随机森林算法库总结与调参实践

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128947.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]
NL2SQL基础系列(1):业界顶尖排行榜、权威测评数据集及LLM大模型(Spider vs BIRD)全面对比优劣分析[Text2SQL、Text2DSL]
汀丶人工智能
2024/04/16
3.2K0
NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]
Vanna 离线环境部署
Vanna[1] 是一个 MIT 许可的开源 Python RAG(Retrieval-Augmented Generation)框架,可以用来以对话形式与 SQL 数据库交互。
AlphaHinex
2024/06/11
2.6K2
Vanna 离线环境部署
使用上下文策略极大提高AI SQL 准确性
拥有一个能够回答商业用户简单的语言问题的自主人工智能智能体的承诺是一个有吸引力的提议,但迄今为止仍难以实现。许多人尝试过让 ChatGPT 进行写入,但成效有限。失败的主要原因是大语言模型对其要求查询的特定数据集缺乏了解。
大数据杂货铺
2024/03/11
6830
使用上下文策略极大提高AI SQL 准确性
AI驱动TDSQL-C Serverless 数据库技术实战营-Vanna配合ollama分析TDSQL-C Serverless 数据库
经过这么长时间的迭代,大模型种类繁多,使用也越来越简单了,今天我们使用Vanna配合ollama本地大模型,基于TDSQL-C MYSQL Serverless构建智能数据库分析系统
用户11291471
2024/10/08
4590
Vanna:一个便捷的SQL数据库交互工具
1月17日 消息:Vanna是一个为用户提供更便捷地与SQL数据库交互的工具。它通过允许用户使用自然语言来查询数据库,然后将这些语言转换成SQL语句,从而实现数据库信息的查询和获取。
半夜喝可乐
2024/09/30
3400
Vanna:一个便捷的SQL数据库交互工具
SQL Assistant:Streamlit 中的文本到 SQL 应用程序
在本文中,我们将探索Vanna.ai的应用,这是一个Python 库,专门用于训练能够处理自然语言问题并生成 SQL 查询作为响应的模型。此实现将集成到 ✨Streamlit 应用程序中,创建一个 🤖 聊天机器人,方便提出问题并为返回的查询提供解释。
大数据杂货铺
2024/01/31
1.9K0
SQL Assistant:Streamlit 中的文本到 SQL 应用程序
从一张数据表谈起
今年年初,我基于一份记录去年消费情况的 CSV 格式表格,使用 Cursor 代码生成工具,根据我的需求生成了 Python 代码,成功分析了去年的年度消费情况,过程清晰且高效。如今,半年过去了,更多的基于大模型的产品层出不穷,近期 MCP(Model Context Protocol)备受关注,各厂商也积极适配自身工具,提供相应的 MCP Server 服务。
dsy
2025/05/19
570
介绍一些好玩且实用的开源的AI工具
随着人工智能技术的迅猛发展,开源社区涌现出了许多关于AI的项目,这些项目不仅展示了技术的创新力,也为开发者提供了丰富的工具和资源。本文将介绍几个既有趣又实用的开源人工智能工具,它们不仅能够帮助你加深对人工智能技术的理解,还能在实际应用中大显身手。
星哥玩云
2024/07/03
9940
介绍一些好玩且实用的开源的AI工具
danswer——一键构建私人本地知识库的最佳选择之一
danswer是一款支持使用自然语言提问并获得私人来源支持的答案的AI应用。可以连接到Slack、GitHub、Confluence等工具。
山行AI
2023/09/08
2.4K0
danswer——一键构建私人本地知识库的最佳选择之一
# 强大的开源项目RAG-GPT:5分钟实现LLM大模型应用到你的网站!
随着chatgpt等大型语言模型(LLM)能力越来越强大,如何将这些模型精准地应用于特定垂直领域,让各行业开发者快速利用LLM赋能也成为热点和痛点。众所周知,LLM在处理超出其训练数据或涉及最新实事时,常会产生“幻觉”现象,简单理解就是会出现一本正经的胡说八道,回答不准确。针对此问题,RAG通过从外部知识库检索相关文档作为上下文输入到LLM有效地减少了生成内容不符合实际的情况。
OpenIM
2024/05/19
9180
Lumos——一款由大模型Ollama提供的本地LLM浏览网页Chrome扩展
春节在家,翻了很多优秀的AI开源项目,这里选几款和大家分享一下。Lumos是一款由本地LLM驱动(也就是大模型本地布署),用于浏览网页的RAG LLM协助工具。
山行AI
2024/02/26
3.1K0
Lumos——一款由大模型Ollama提供的本地LLM浏览网页Chrome扩展
NL2SQL进阶系列(2):DAIL-SQL、DB-GPT开源应用实践详解Text2SQL
NL2SQL基础系列(1):业界顶尖排行榜、权威测评数据集及LLM大模型(Spider vs BIRD)全面对比优劣分析[Text2SQL、Text2DSL]
汀丶人工智能
2024/04/12
1.2K0
NL2SQL进阶系列(2):DAIL-SQL、DB-GPT开源应用实践详解Text2SQL
GenAI——LLM结合图谱RAG和LangChain实战指南
GenAI 栈将帮助你迅速开始构建自己的GenAI应用。演示应用可以作为灵感来源或起点。在技术博客文章[19]中了解更多详情。
山行AI
2023/12/29
4.1K1
GenAI——LLM结合图谱RAG和LangChain实战指南
构建优秀LLM应用的四大要点
在 OpenAI 发布其第一个 ChatGPT 模型一年之后,对生成式 AI 的兴趣爆炸式增长。大语言模型(LLM)驱动的应用程序现在成为企业思考生产力和效率的前沿。用于构建生成式 AI 应用程序的工具和框架也得到了极大的扩展。但是人们还是担心生成式 AI 输出的准确性,开发人员需要快速学习如何处理这些问题,以构建强大且值得信赖的应用程序。
云云众生s
2024/03/28
2650
LlamaIndex——与LangChain类似但更专注于数据处理的LLM框架
LlamaIndex(前身为GPT Index)是一种用于LLM应用程序摄取、结构化和访问私有或领域特定数据的数据框架。
山行AI
2023/09/27
13.1K0
LlamaIndex——与LangChain类似但更专注于数据处理的LLM框架
基于LangChain的优秀项目资源库
在AI盛起的当下,各类AI应用不断地出现在人们的视野中,AI正在重塑着各行各业,LangChain是从事AI应用开发的人员或多或少都会接触到的框架。LangChain是一个令人惊叹的框架,可以在极短的时间内完成LLM项目,其生态系统正在快速发展。
山行AI
2023/06/26
3K0
基于LangChain的优秀项目资源库
LangChain 学习路线图:从入门到实战的完整指南
在大型语言模型(LLM)如 ChatGPT、Claude 等快速发展的今天,开发者不仅希望能“使用”这些模型,还希望能将它们灵活集成到自己的应用中,实现更强大的对话能力、搜索增强问答(RAG)、工具调用(Tool Calling)、多轮推理等功能。
IT蜗壳-Tango
2025/04/08
1.3K0
用 LangChain 构建文档问答助手
随着大语言模型(LLM)的广泛应用,越来越多企业和个人希望利用它来实现“基于文档的智能问答”功能。例如:
IT蜗壳-Tango
2025/04/09
1820
机器学习周刊 第4期:基于ChatGPT API的Android语音助手
这个《动手实战人工智能 Hands-on AI》写的相当不错,作者用 Jupyter Notebook编写了这个教程,参考了《机器学习方法》,《深度学习入门》,西瓜书,花花书等,剖析和推导每一个基础算法的原理,将数学过程写出来了,同时基于 Python 代码对公式进行实现,做到公式和代码的一一对应。
Ai学习的老章
2024/01/04
3400
机器学习周刊 第4期:基于ChatGPT API的Android语音助手
RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐
MaxKB = Max Knowledge Base,是一款基于 LLM 大语言模型的开源知识库问答系统,旨在成为企业的最强大脑。它能够帮助企业高效地管理知识,并提供智能问答功能。想象一下,你有一个虚拟助手,可以回答各种关于公司内部知识的问题,无论是政策、流程,还是技术文档,MaxKB 都能快速准确地给出答案:比如公司内网如何访问、如何提交视觉设计需求等等
汀丶人工智能
2024/08/05
12K0
RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐
推荐阅读
相关推荐
NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验