IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 集成树模型系列之一——随机森林 -> 正文阅读

[人工智能]集成树模型系列之一——随机森林

集成树模型系列之一——随机森林

随机森林一般会被认为集成树模型的开端,虽然现在工业或者比赛中都很少会被应用,但是我们学习集成树模型都绕不过它,它的一些思想被广泛地应用到后面的集成树模型中。
随机森林这个取名非常地贴切,涵括了它最重要的2个特征:“随机”,“森林”。

随机森林的"森林"

森林顾名思义肯定涵盖了很多棵树,随机森林也恰是很多棵决策数组合而成的。那么它是怎么组合而成的呢?我们先引入几个概念:

一:bagging和boosting。

1:Bagging即套袋法,在多数情况下,bagging 方法提供了一种非常简单的方式来对单一模型(同一个算法在不同的训练集上训练多个模型)进行改进,而无需修改背后的算法。其算法过程如下:
1):从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
2):每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
3):对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)
平常我们说的五折验证可以认为是采用的bagging方法(当然他们们的数据不是独立的,各个数据集生成的模型是完全独立的,可以并行训练模型,并且数据集随机划分),在我认为:从更广义地地方来说多个相互独立的模型的结果加权起来用的就是bagging方法。

2:boosting是通过一定的方式将基础模型进行线性的组合,更强调的模型的结合,因为往往各个模型之间不是相互独立的,这一个模型会依赖上一个模型的结果。主流的boosting模型有GBDT(我们之后会简单讲述)。

二:偏差和方差

1:偏差大一般代表欠拟合,方差大一般代表过拟合。偏差反应模型的拟合能力,方差更反应的是模型的鲁棒性。
一般我们会说:bagging可以降低方差,boosting一般用于降低偏差。
这是因为bagging是选取各种模型的结果然后线性加权,各个模型之间是独立的,可以有 E [ ∑ ( x i ) n ] = E [ x i ] E[\frac{\sum(x_i)}{n}]=E[x_i] E[n(xi?)?]=E[xi?],通过bagging融合之后并不能很明显地降低偏差。但是由于 v a r ( ∑ ( x i ) n ) = v a r ( x i ) n var(\frac{\sum(x_i)}{n})=\frac{var(x_i)}{n} var(n(xi?)?)=nvar(xi?)?,因此可以明显地降低方差。与此同时,boosting是采用forward-stagewise这种贪心法去最小化损失函数,比如常见地GBDT是下一棵树直接去拟合上一棵树的损失函数,这种方法肯定会带来bais的降低,同时由于各个模型之间并不独立并不能较少偏差。

随机森林的"随机"

一些概念介绍完了,我先用一句话定义下随机森林,随机森林是一种采用了bagging方法将决策树模型集成起来的集成模型。关于集成的概念我们了解,那么接下来介绍下"随机"。
随机森林的随机可以分别两个方面:
1:数据的随机
2:特征的随机

一:数据随机

随机森林会并行地生成很多棵决策树,每棵决策树的训练数据都是从整体数据中随机选择部分数据。

二:特征随机

为了最后训练决策树之间的差异性变大,除了数据随机之外,决策树还加了一个特征随机,每个决策树的训练都只采用了部分的特征。

注:数据随机和特征随机的思想,xgb模型中也应用到了(根据subsample和colsample_bytree参数设置比例),主要是防止过拟合。

关于随机森林的介绍就到此结束。总结一下:随机森林是采用bagging的方法将多棵决策树结果线性加权起来,各棵树中的训练数据和特征都是从总体数据和特征中随机抽取的。

下面介绍一下sklearn中随机森林的实现方法:

 from sklearn.ensemble import RandomForestClassifier
 from sklearn.datasets import make_classification
 X, y = make_classification(n_samples=1000, n_features=4,
n_informative=2, n_redundant=0,random_state=0, shuffle=False)
 clf = RandomForestClassifier(max_depth=2, random_state=0)
clf.fit(X, y)
 RandomForestClassifier(...)
 print(clf.predict([[0, 0, 0, 0]]))

更多关于随机森林的细节可以学习sklearn.ensemble._forest.py中的源代码。

随机森林的优缺点

优点:
1:与传统决策树模型相比,它结合了多个决策树模型的结果,模型地效果会更好。
2:与xgb等梯度提升树相比,它由于可以并行地生成树,不需要像梯度提升树模型那样需要等第一棵树生成完再生成下一棵树,因此速度更快。
缺点:
1:与xgb等梯度提升树相比,效果会差一些。同样也是因此,一般在数据挖掘地比赛中我们很少会使用随机森林。

集成树第一章随机森林介绍完毕,下期将介绍GBDT模型的基本原理和详细介绍xgboost的原理。
我想留个问题和大家一起探讨下:
1:plantsgo在kaggle中率先使用的嫁接是基于bagging或者boosting,或者什么都不是。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 12:50:24  更:2021-10-27 12:50:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 8:40:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码