当前位置: 首页 > news >正文

随机森林的算法

1、随机森林算法简介

随机森林算法(Random Forests)是LeoBreiman于2001年提出的,它是一种通过重采样办法从原始训练样本集中有放回地重复随机抽取若干个样本生成多个决策树,样本的最终预测值由这些决策树的结果投票决定的一种有监督集成学习模型。

其核心思想是通过随机的样本抽样和特征抽样生成众多决策树,形成一片“森林”,以多数的表决结果作为预测值。

随机森林作为一种bagging集成学习,在决策树算法中有着重要的地位。

2、随机森林算法基本原理

2.1 样本的选择

随机森林的样本采样选择可以看作是行采样。随机森林每棵在构建过程中,这棵树的样本从总样本中随机抽样生成。完成抽样后将样本放回,以便下一棵树的抽样。假设总样本有N个,随机森林每棵树的随机抽样样本数为n,一般可取n为N的平方根。

2.2 特征的选择

随机森林的特征采样可以看作是列采样。每棵树都是从总体M个特征中随机选择m特征进行树的生成。列采样有两种形式,一种是全局列采样,即同一棵树的生成过程中均采用同一批特征;另一种是局部列采样,即每一次节点分裂的时候都单独随机挑选m个特征进行分裂。

2.3 分裂准则

在树的生成过程中,采用的分裂准则。在随机森林算法中,可以有多种分裂准则。在随机森林的分类算法中,比较常见的有信息增益、基尼不纯度;在随机森林的回归算法中,比较常见的有均方误差。

3、随机森林算法步骤

3.1 输入输出

(1)输入:给定训练样本;参数设置:森林里树的数量、分裂的准则、分裂终止条件等。

(2)输出:样本的分类或回归值。

3.2 算法步骤

(1)从训练样本N个中随机有放回地选择n个;

(2)从特征中随机不放回地选择k个特征;

(3)根据指定的分裂准则进行分裂,生成一棵决策树;叶子节点的输出值:当为分类问题时,叶子的取值为分类最多的值;当为回归问题时,叶子节点的取值为该节点所有样本的平均值;

(4)当森林中树的数量小于指定值时,继续步骤(1)到(3),最终成生指定数量的决策树;

(5)预测时,样本在每棵决策树下会有一个对应叶子的值。当为分类问题时,最终取值为所有树下该叶子值的数量最多的值(分类);当为回归问题时,最终取值为所有树下叶子值的平均值。

4、随机森林算法实例

这里以用scikit-learn自带的数据集进行演示。

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
#加载数据集
X, y = make_classification(n_samples=1000, n_features=4,n_informative=2, n_redundant=0,random_state=0, shuffle=False)
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)#模型训练
clf = RandomForestClassifier(max_depth=2, random_state=0)
clf.fit(X_train,y_train)# 预测测试集
y_pred = clf.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print("Model accuracy: %.2f"%accuracy)
Model accuracy: 0.94

5、随机森林算法总结

(1)随机森林算法具有很高的准确性和鲁棒性。随机森林算法由众多决策树共同投票决策,其结果具有较好的准确性和鲁棒性。

(2)随机森林算法可以很好地防止过拟合。随机森林每棵树的训练都是在小部分样本及特征上训练而成,可以很好地防止过拟合。

(3)随机森林算法可以并行构建决策树,提高运算效率。

(4)随机森林算法可以很好地处理高维度数据。

(5)随机森林算法在小样本上的表现可能会不佳。

http://www.lryc.cn/news/412264.html

相关文章:

  • 3.1、数据结构-线性表
  • 记一次对HTB:Carpediem的渗透测试
  • MATH2 数据集:AI辅助生成高挑战性的数学题目
  • 加密货币“蓄势待发”!美国松口降息!九月开始连续降息8次?2025年利率目标3.25-3.5%?
  • Vue.js 3.x 必修课|005|代码规范与 ESLint 入门
  • 【Linux】动态库|静态库|创建使用|动态库加载过程
  • WebSocket 协议与 HTTP 协议、定时轮询技术、长轮询技术
  • 二叉树节点问题
  • 公司里的IT是什么?
  • 【小程序爬虫入门实战】使用Python爬取易题库
  • 案例 —— 怪物出水
  • vue中使用print.js实现页面打印并增加水印
  • 计算机基础(Windows 10+Office 2016)教程 —— 第5章 文档编辑软件Word 2016(下)
  • 简单洗牌算法
  • JVM: 堆上的数据存储
  • AI产品经理的职责与能力:将AI技术转化为实际价值
  • 【独家原创RIME-CNN-LSSVM】基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测
  • 如何对B站的热门视频进行分析
  • MobaXterm tmux 配置妥当
  • 排序算法:快速排序,golang实现
  • step:菜单栏静态加载和动态加载
  • 【简历】武汉某985大学:前端简历指导,拿offer可能性低
  • 推荐系统的核心逻辑 MVP
  • Java中的BIO,NIO与操作系统IO模型的区分
  • AI砸掉了这些人的饭碗
  • 端口及对应服务
  • 剑指offer题解合集——Week7day1[滑动窗口的最大值]
  • 深入解读财报,开启美股投资之旅
  • 邦芒支招:成功找到工作要掌握的3个知识点
  • Educational Codeforces Round 168 (Rated for Div. 2)-7.30复盘