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

事实上随机森林的基本单元决策树很早就被提出来了,只不过单个决策树效果不好。这个情况和神经网络差不多。

到了2001年Breiman把分类树组合成随机森林(Breiman 2001a),即在变量(列)的使用和数据(行)的使用上进行随机化,生成很多分类树,再汇总分类树的结果。在运算没有增加的情况下,精度提高了不少。

进入正题

随机森林由两个部分组成

随机 和 森林

森林简单来说就是很多颗树,而这个树就是决策树。

所以现在的问题可以有以下三个:什么叫决策树,树树之间怎么组成森林,又怎么个随机法?

现在先来回答第一个问题:

决策树,简单来说就是用来决策的树状结构。

emmm像这样的:

决策树

用更专业(装逼)的话来说就是将空间用超平面进行划分的一种方法,每次分割的时候,都将当前的空间一分为二。
在这里插入图片描述

第二个问题:树树之间怎么组成森林?

森林四步走,精度九十九

第一步:设有N个样本,有放回地随机选择n个样本。

第二步:设每个样本有M个属性,在每个决策树进行分裂时,随机抽样m个属性,m远小于M。然后运用某种评价指标评价每个属性,选择最佳属性作为分裂属性。

第三步:对于每个节点而言都要按照第二步来走,一直到评价指标遍历所有抽样出来的属性都无法得到改进为止。每棵树都尽可能生长没有剪枝。

第四步:重复前面三个步骤就变成了随机森林。

最后的结果会像这样:

就是这样的

那么接下来这个森林怎么用呢?就是说怎么用来预测呢?

我们都知道每棵树都会给出一个结果,那么怎么将这些结果变成一个结果?

总体来说有四个方法:

bagging:通俗而言就是盲人摸象,对大象的总体每次有放回地抽样给盲人摸,而没有放回的就叫pasting

boosting:通俗而言接力赛,不断学习上一个人的经验,最后汇总结果。最常见的应用是自适应提升(adaboost)和梯度提升(gradient
boosting)。

stacking:这个就比较复杂,没有什么形象的说法。简单来说就是对每个基础学习模型,都进行一次将训练集分成五份取四份作为模型输入然后输出预测,同时对测试进行预测。将五份预测的测试集取平均作为新的测试集。将模型的五个训练集输出合并为一个新特征作为模型的新训练集。那么再用元模型对新训练集训练,用训练好的模型对测试集输出预测。

voting:顾名思义就是投票,对分类问题来说,投票还有软投票和硬投票,硬投票指的是少数服从多数;软投票指的是对各分类的概率取平均,概率最高的分类为输出分类。

在随机森林中使用的就是bagging,从第一步的描述就可以看出来。

现在还有一个问题就是上面提到的评价指标是什么东西?

常见的指标有

ID3用的是信息增益,C4.5用的是信息增益率,而CART用的是Gini系数

ID3算法十分简单,核心是根据“最大信息熵增益”原则选择划分当前数据集的最好特征。熵由是什么东西呢?熵就是消灭不确定性所需要的信息量。什么叫信息量呢?信息量的概率是这样的,发生概率越小的事件所包含的信息越多。数学公式
在这里插入图片描述
在这里插入图片描述

信息增益就是,分裂前后信息熵的增加。

C4.5是Ross Quinlan在1993年在ID3的基础上改进而提出的。.ID3采用的信息增益度量存在一个缺点,它一般会优先选择有较多属性值的Feature,因为属性值多的Feature会有相对较大的信息增益?(信息增益反映的给定一个条件以后不确定性减少的程度,必然是分得越细的数据集确定性更高,也就是条件熵越小,信息增益越大).为了避免这个不足C4.5中是用信息增益比率(gain ratio)来作为选择分支的准则。信息增益比率通过引入一个被称作分裂信息(Split information)的项来惩罚取值较多的Feature。除此之外,C4.5还弥补了ID3中不能处理特征属性值连续的问题。但是,对连续属性值需要扫描排序,会使C4.5性能下降
在这里插入图片描述

Di/D为第i个分类的出现频率

CART(Classification and Regression tree)分类回归树由L.Breiman,J.Friedman,R.Olshen和C.Stone于1984年提出。ID3中根据属性值分割数据,之后该特征不会再起作用,这种快速切割的方式会影响算法的准确率。CART是一棵二叉树,采用二元切分法,每次把数据切成两份,分别进入左子树、右子树。而且每个非叶子节点都有两个孩子,所以CART的叶子节点比非叶子多1。相比ID3和C4.5,CART应用要多一些,既可以用于分类也可以用于回归。CART分类时,使用基尼指数(Gini)来选择最好的数据分割的特征,gini描述的是纯度,与信息熵的含义相似。CART中每一次迭代都会降低GINI系数。下图显示信息熵增益的一半,Gini指数,分类误差率三种评价指标非常接近。回归时使用均方差作为loss function。基尼系数的计算与信息熵增益的方式非常类似,公式如下

在这里插入图片描述

ps.其实学过经济学的都应该知道基尼系数,就是描述不平等现象的一个指标。其中通常认为上世纪70年以来的科技浪潮加速了收入不平等现象。可以预见人工智能这个浪潮。。。不说了咳咳。。

现在让我们从新看一下那四步,我们会发现多了一个叫剪枝的东西。

剪枝是为了解决决策树容易过拟合而发展过来的技术。俗称怕他长歪了。

剪枝分为两种:前剪枝和后剪枝

前剪枝:

树到达一定高度

节点下包含的样本点小雨一定数目

信息增益小雨一定的阈值

节点下所有样本都属于同一个类别

后剪枝:

降低错误剪枝 REP(Reduced Error Pruning)

悲观错误剪枝 PEP(Pessimistic Error Pruning)

基于错误剪枝 EBP(Error Based Pruning)

代价-复杂度剪枝 CCP(Cost Complexity Pruning)

最小错误剪枝 MEP(Minimum Error Pruning)

拿 CCP 举例,CART用的就是CCP剪枝,其余的剪枝方法可以网上google一下. CCP剪枝类实际上就是我们之前讲到的最小化结构风险,对决策树,结构风险定义为:

其中: C(T)为模型对训练数据的误差.对分类树,可以采用熵,基尼指数等等.对回归树,可以采用平方误差,∣T∣ 为树的叶子节点个数,
α为两者的平衡系数。

当然随机森林是没有剪枝的!!为什么呢我个人认为随机森林事实已经存在前剪枝了,因为决策树并不能遍历样本所有特征,等于限制了决策树的复杂度。

简单总结一下:

优点:

1.快,非常快,由于每棵树都是独立的,意味着可以同时训练,加快速度。

2.不用处理缺失值,同时也不用对高维数据降维

3.能够输出特征重要性

4.精度也不错,不容易过拟合

缺点:

1.精度高,但是现在已经不够高

2.噪音过大的情况,可能会过拟合

如果说现在随机森林还有(在数据竞赛里面)用的话,主要用于

1.特征选择

2.预测缺失值

如果有人知道随机森林在实际业务场景还有用处的话,可以告知一下我。

随机森林要讲的东西说得差不多了,下面用sklearn来实现一下:

from sklearn.ensemble import RandomForestClassifier
X_train,X_test=[[0,1],[1,0]],[1,1]
y_train=[1,0]
rf=RandomForestClassifier(random_state=021)
rf.fit(X_train,y_train)
results = rf.predict(X_test)
#或者我们可以输出起预测概率
results_proba = rf.predict_proba(X_test)
#因为我们可以通过软投票的方法来再组成一个强学习器

下面介绍一下参数:

n_estimators: 森林里面决策树的数量,一般用来降低偏差

criterion: 就上面我们介绍的评价指标,默认是gini系数

max_depth:树的深度,一般用来降偏差

min_samples_split:前剪枝的一种,节点最小样本数,默认为2,防止过拟合

min_samples_leaf:叶节点最小样本数,默认为1,同样是前剪枝,防止过拟合

max_features:
每次bagging时的最大特征数,默认为auto,即最大特征数的开方。其他可以选的有,绝对特征数(如果输入为整数),百分比特征数(如果输入为0-1),对数特征数(log2),不抽样(None)。

max_leaf_nodes:最大叶节点数,默认为None,防止过拟合

min_impurity_descrease: 不纯度阈值,默认为0,防止过拟合

booststrap:是否有放回,默认为Ture,实际上如果选择False那么就会变成pasting

oob_score:袋外分数,事实上每次对有放回抽样,那么肯定存在一些样本没有被抽到,那么没有被抽到的样本称为袋外样本,用训练好的模型预测袋外样本所得到的分数即为out
of bag score。默认为False

n_jobs:即多少个进程来训练和预测,默认为None,应该调为-1,即不限制。

random_state:随机种子,一般用来复现分数,可以随便选一个,我选了我的学号hhh

verbose: 就是每隔多少输出一次信息,默认为0,一般设为100

warm_start: 是否热启动,即使用上次的模型进行训练,默认否

class_weight:
是否对分类进行加权,如果是不平衡样本的话需要进行操作否则不需要。因为所以存在某一个类特别多的话,那么抽样出来的样本全部都是那个类别,模型也只能学习到那个类别,从而泛华能力不强。如果不平衡样本可以选择balanced,或者自己传入一个字典。

随机森林再最随机一点就是Extremely Randomized Trees极端随机森林

对于随机森林,进行了行列随机。而进一步,ERT对于特征的分裂点也进行了随机。可谓真~随机森林,与随机森林比偏差增大,方差减少。

讲完上面的bagging+决策树

下面就可以讲一下boosting+决策树

其中

自适应boosting+决策树=adaboost

梯度boosting+决策树=GBDT

会重点讲GBDT,因为顺着GBDT会衍生出niubility的Xgboost和lightGBM。

一些细节:

会有样本在随机抽样时,没有被抽到吗?会的话,会有多少?

当然是有的,考虑有N个样本,抽取M次后,求某个样本没有被抽到的概率。

(1 - 1/N)^M

那么N、M趋于无穷大时,等于1/e约等于0.368,也就是说至少有36.8%的样本是没有被看过的。

那么对于特征也同理,但是现实中特征的维度通常是有限的。所以M趋于无限大时,不被抽到的概率会趋于零。

而我之前错误的理解认为,特征抽取是一次性的,后来看视频才发现也是一次一次抽的。每抽取一个样本,再随机抽取其中一些特征进行训练。

所以对于随机森林模型,一定要对大样本进行大的森林训练,否则可能会学习不完整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/7890.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

随机森林及应用

学习了B站视频《随机森林及应用》,记录一下学习笔记啦,原视频链接:Python机器学习算法实践Ⅲ-随机森林及应用。 一、随机森林属于集成学习,所以首先了解集成学习。在集成学习中,主要分为Bagging算法和Boosting算法。 B…

随机森林(Random Forests)介绍

1.决策树(Decision Tree) 决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。常见的决策树算法有C4.5、ID3和CART。ID3算法用的是信息增益,C…

使用随机森林进行特征选择

绘制随机森林每棵树的决策边界 首先导入必要的库函数: from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import make_moons from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt import numpy as…

python实现随机森林

定义: 随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类器。可回归可分类。 所以随机森林是基于多颗决策树的一种集成学习算法,常见的决策树算法主要有以下几种: 1. ID3:使用信息增益g(D,A)进行特征选择 2. C4.5&…

教你体验目前最火AI - 在craft AI assistant 使用chatGPT

atGPT大火之后,很多人都想体验一把,今天为大家推荐一种免费方式,体验chatGPT同款内核的AI助手。 craft AI assistant Craft 推出的 AI 助手产品 Craft AI Assistant,并且现在就可以使用。根据 Craft 官方介绍,Craft …

【ChatGPT+AI】持续更新

ChatGPT的缘分 ChatGPT的缘分 一、小白必知1.1ChatGPT是什么?1.2ChatGPT怎么用?1.3ChatGPT登录注意事项 二、ChatGPT实战2.1什么Prompt?2.2ChatGPT怎么发图片2.3ChatGPT快速制作PPT 三、其他AI与免费镜像网站四、星球介绍 ChatGPT的缘分 大家…

DetectGPT VS ChatGPT:AI反击战?

1.背景 随着 ChatGPT 的持续火爆,现在无论哪个行业,几乎是人尽皆知。同时,利用 ChatGPT 进行造假作弊的情况也是层出不穷,尤其是在教育和传媒行业。在美国的一项千人调查中,有89%的学生表示在家庭作业中使用了 ChatGP…

多国拟发ChatGPT禁令 关“野兽”的笼子要来了?

“人工智能想越狱“、”AI产生自我意识”、“AI终将杀死人类”、“硅基生命的进化”.......曾经只在在赛博朋克等科技幻想中出现的剧情,在今年走向现实,生成式自然语言模型正在遭受前所未有的质疑。 聚光灯下最瞩目的那个是ChatGPT,3月底到4…

ChatGPT从入门到精通,深入认识Prompt

ChatGPT从入门到精通,一站式掌握办公自动化/爬虫/数据分析和可视化图表制作 全面AI时代就在转角 道路已经铺好了 “局外人”or“先行者” 就在此刻 等你决定 让ChatGPT帮你高效实现职场办公!行动起来吧。欢迎关注专栏 。。。。。 还有更多。。。。&…

【Prompting】ChatGPT Prompt Engineering开发指南(1)

ChatGPT Prompt Engineering开发指南1 Prompting指南设置 提示原则策略1:使用分隔符清楚地指示输入的不同部分策略2:要求结构化输出策略3:让模型检查条件是否满足策略4: “Few-shot”提示 原则2:给模型时间“思考”策略1&#xff…

【ChatGPT】Prompt Engineering入门

Prompt Engineering入门 一、什么是 Prompt Engineering?二、我们还需要学习 PE 吗?三、Prompt基础原则 一、什么是 Prompt Engineering? 简单的理解它是给 AI 模型的指令。它可以是一个问题、一段文字描述,甚至可以是带有一堆参数…

大型语言模型LLM的基础应用

ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚…

【ChatGPT】怎样计算文本token数量?

ChatGPT 按 token 计费,当你把一段长文本发送给它时,你如何计算该文本消耗了多少 token? 在非流式访问的情况下,ChatGPT 的回复信息中包含有 token 消耗数量。但是在流式访问的情况下,回复信息里没有 token 数量&…

微软用 ChatGPT 改写 Bing、Edge,市值一夜飙涨 5450 亿元!

整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 已经没有什么能够阻挡科技巨头追逐 ChatGPT 的步伐,前有 Google CEO 桑达尔皮查伊亲自下场官宣 Bard AI 对话式系统的到来,后有微软更快一步地推出了应用 ChatGPT 的 Bing 搜索引…

ChatGPT和DALLE-2级联后,输出效果震撼了…

源|机器之心 文|张倩、袁铭怿 生成式 AI 正在变革内容的生产方式。 在过去的一周,相信大家都被 ChatGPT 刷了屏。这个强大的对话 AI 仅用 5 天时间用户量就突破了 100 万。大家用各种方式测试着它的能力上限,其中一种测试方式就是…

ChatGPT 的能力上限将被突破

最近,一篇名为《Scaling Transformr to 1M tokens and beyond with RMT》的论文在 AI 界引起了广泛热议。 该论文提出一种名为 RMT 的新技术,如果能够成功应用,那将把 Transformer 的 Token 上限扩展至 100 万,甚至更多。 GitHub…

ChatGPT 的 10 种集成模式:从开源 AI 体验平台 ClickPrompt 中受到的启发

和国内外的很多公司一样,在 Open AI 公司开放了 ChatGPT API 接口之后,我们也在探索如何去结合到业务中。而在探索的过程中,我们发现了一个问题,大部分的业务人员并不了解 AI 的能力,所以我们开源构建了 ClickPrompt&a…

聊天新纪元:通过和ChatGPT聊天就能开发自己的Chrome插件

文章目录 1. 前言1.1 ChatGPT是什么1.2 ChatGPT能干什么1.3 我要让ChatGPT干什么 2. 环境准备3. 交互过程3.1 发送需求3.2 询问执行3.3 继续提问3.4 加载代码3.5 执行插件3.6 执行插件 4. 生成的代码4.1 manifest.json4.2 popup.css4.3 popup.js4.4 popup.html 5. 总结 1. 前言…

学术科研专用ChatGPT来了!

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 【导读】最近,一位开发者在GitHub上开源的「科研工作专用ChatGPT」项目大受好评。论文润色、语法检查、中英互译、代码解释等等一键搞定。 自从ChatGPT发布之…

今天,小呆呆第一次尝新ChatGPT,并小火了一把

前言 你盼世界,我盼望你无bug。Hello 大家好!我是霖呆呆。 当我们遇到技术难题或生活困惑时,往往会寻求专业人士的帮助或者在网络上搜索相关问题。但你是否曾想过,如果有一种AI程序能够帮你解决问题,理解人类语言的含义…