机器学习——随机森林

news2024/11/21 18:06:03

机器学习——随机森林

随机森林是一种强大的集成学习算法,能够用于分类和回归任务。它基于决策树构建,在集成学习框架下,通过Bagging算法和随机特征选择的方式,将多棵决策树组合成一个更强大的模型。本篇博客将介绍随机森林的原理、随机森林与Bagging的区别、随机森林中的相关性、每棵树的分类能力、以及随机森林的参数设置,并使用Python实现以上所有的算法。

1. 原理

1.1 集成学习

集成学习是一种将多个模型组合起来的机器学习方法,旨在提高模型的性能和泛化能力。常见的集成学习方法包括Bagging和Boosting。

1.2 Bagging算法

Bagging(Bootstrap Aggregating)算法是一种集成学习方法,通过对原始数据集进行有放回抽样,生成多个子数据集,然后分别训练多个基学习器,最后将它们的预测结果进行平均或投票,得到最终的预测结果。

1.3 随机森林

随机森林是Bagging算法的一种扩展,它基于决策树构建,对特征进行随机选择,生成多棵决策树,并将它们的预测结果进行平均或投票。

2. 随机森林

2.1 与Bagging的区别

随机森林在生成每棵决策树时,不仅对样本进行有放回抽样,还对特征进行有放回抽样,以降低树与树之间的相关性,进而提高模型的泛化能力。

2.2 任意两棵树的相关性

随机森林中的任意两棵树之间具有一定的相关性,但相比于单个决策树,随机森林的相关性更低,这是因为随机森林在生成每棵树时都对特征进行了随机选择。

2.3 每棵树的分类能力

随机森林中每棵树的分类能力相对较弱,但通过集成多棵树的预测结果,可以获得更强大的分类能力。

2.4 随机森林的参数

随机森林的参数包括决策树个数、每棵树的最大深度、每个节点的最小样本数等。

3. Python实现

接下来,让我们使用Python实现随机森林算法,并在一个示例数据集上进行训练和预测。

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 将数据集的特征维度降到2维
X_train_2d = X_train[:, :2]  # 取前两个特征

# 构建随机森林模型
clf = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)
clf.fit(X_train_2d, y_train)

# 绘制分类结果
def plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02):
    markers = ('s', 'x', 'o', '^', 'v')
    colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
    cmap = ListedColormap(colors[:len(np.unique(y))])

    x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),
                           np.arange(x2_min, x2_max, resolution))
    Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
    Z = Z.reshape(xx1.shape)
    plt.contourf(xx1, xx2, Z, alpha=0.3, cmap=cmap)
    plt.xlim(xx1.min(), xx1.max())
    plt.ylim(xx2.min(), xx2.max())

    for idx, cl in enumerate(np.unique(y)):
        plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1],
                    alpha=0.8, c=[cmap(idx)],
                    marker=markers[idx], label=cl)

    if test_idx:
        X_test, y_test = X[test_idx, :], y[test_idx]
        plt.scatter(X_test[:, 0], X_test[:, 1], c='',
                    alpha=1.0, linewidths=1, marker='o',
                    s=55, label='test set')

# 可视化分类结果
plt.figure(figsize=(10, 6))
plot_decision_regions(X_train_2d, y_train, classifier=clf)
plt.xlabel('Sepal length (cm)')
plt.ylabel('Sepal width (cm)')
plt.legend(loc='upper left')
plt.title('Random Forest Classification Result on Training Set')
plt.show()

在这里插入图片描述
这段代码实现了使用随机森林对鸢尾花数据集进行分类,并将分类结果可视化展示在二维平面上。

首先,我们加载了鸢尾花数据集,并将数据集划分为训练集和测试集,其中训练集占比80%。

接着,我们从原始数据集中提取了前两个特征,将数据集的特征维度降到了2维,以便后续可视化展示。

然后,我们构建了一个包含100棵决策树的随机森林模型,并使用训练集进行训练。

随后,定义了一个用于绘制分类结果的函数plot_decision_regions,其中使用了meshgrid生成了网格点,对每个网格点进行了预测,并绘制了分类边界。

最后,我们调用plot_decision_regions函数,将训练集上的分类结果进行可视化展示,同时添加了横坐标和纵坐标的标签,以及图例和标题。

通过运行以上代码,我们可以直观地观察到随机森林在训练集上的分类效果。

4. 总结

随机森林是一种强大的集成学习算法,通过对决策树进行Bagging和随机特征选择,能够有效地提高模型的性能和泛化能力。在实际应用中,随机森林通常表现出色,且不需要太多的调参,是一个十分实用的机器学习算法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机专业大学生应该在大学四年踏实学哪些东西?

在这个信息爆炸的时代,对于我们计算机专业的大学生来说,真正难的不是学习新技术,而是决定学什么、放弃什么。时间毕竟有限,每一个选择都像是在做一笔投资,希望能够收获最大的回报。我在这里分享一下我的一些经验&#…

服务器被攻击有什么表现?

引言 在现今高度互联的网络环境中,服务器安全已成为每个企业和个人站长不容忽视的重要议题。服务器作为承载关键业务和数据的核心设施,一旦遭受攻击,不仅可能导致服务中断、数据泄露,还可能带来严重的经济损失和声誉损害。本文旨…

【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项规程

培训、环境、资料、考证 公众号:Geek极安云科 网络安全群:775454947 网络系统管理群:223627079 网络建设与运维群:870959784 极安云科专注于技能提升,赋能 2024年广东省高校的技能提升,在培训中我们的应急…

unity 多屏幕操作

想了解基础操作请移步:(重点是大佬写的好,这里就不再赘述) Unity 基础 之 使用 Display 简单的实现 多屏幕显示的效果_unity display-CSDN博客 在panel上也可以通过获取 Canvas,来达到切换多屏幕的操作, …

详解多模态 AI

2022 年 11 月,OpenAI 推出了 ChatGPT。它只用了几天时间就以其前所未有的能力席卷了世界。生成式人工智能革命已经开始,每个人都在问同一个问题:下一步是什么? 当时,ChatGPT 和许多其他由大型语言模型 (L…

【RK android7.1 开机进入主界面前短暂黑屏或者白屏问题】

RK android7.1 开机进入主界面前短暂黑屏或者白屏问题 问题描述解决方法郑重声明:本人原创博文,都是实战,均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip OS:Android 7.1.2 Kernel: 3.10 问题描述 开机进入主界面得一瞬间,launcher短暂黑屏或者白屏…

这回轮到鸿蒙禁用安卓了!!!

1月18日,鸿蒙生态千帆仪式上,华为正式宣布了HarmonyOS NEXT(下简称鸿蒙星河版或纯血鸿蒙)开发者预览已向开发者开放申请,纯血鸿蒙开始走向普及阶段。伴随着不再兼容安卓的纯血鸿蒙铺开,鸿蒙走进了运营属于自…

【活动预告】本周四(3月28日)AI算法大模型备案线上活动

Al算法备案中心特邀十年合规专家「乐歌」,于本周四进行线上算法备案活动 支持AI创业者,免费咨询算法备案 3.28日20:00腾讯会议欢迎参与! 扫码添加活动助理报名参加!

【Vue3之computed属性(四)】

文章目录 前言一、computed属性有缓存二、使用方法三、修改全名 前言 理解computed属性,实现输入姓和名得出全名并双向绑定,区分单向绑定和双向绑定。测试computed属性和方法的区别 一、computed属性有缓存 先引入computed,写箭头函数定义并…

程序汪若依微服务华为云Linux部署保姆教程

若依官方有3个版本,程序汪以前已经出了对应的安装部署视频教程 单应用版本 前后分离版本 微服务版本 本视频是若依微服务版本,如果基础的环境软件都不会安装建议看下程序汪的单应用和前后端分离版本教程, 欢迎点击进入 (单应…

【论文阅读】Probabilistic Imputation for Time-series Classification with Missing Data

Probabilistic Imputation for Time-series Classification with Missing Data 论文链接:https://icml.cc/virtual/2023/poster/23522 作者:SeungHyun Kim Hyunsu Kim EungGu Yun Hwangrae Lee Jaehun Lee Juho Lee 机构:韩国科学技术…

C++关于类和对象的基础语法

前言: 介绍c中类和对象的基础语法和注意事项,这里是c入门的第一道坎,细节很多,在后面的更深的学习中还会反复提到。 目录 前言: 1.OO语言 2.类的定义 3.类的访问限定符与封装的引入 4.类的实例化 5.关键字this指…

网络七层模型之应用层:理解网络通信的架构(七)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

算法——模拟专题(一篇搞定)

在本专栏已经更新双指针算法,滑动窗口算法,二分查找算法,前缀和算法以及位运算算法,欢迎大家跳转至相关专题阅读 此篇文章为大家带来算法专栏的模拟专题 模拟算法本质就是比葫芦画瓢,思路比较简单,就是将演算流程转化为代码 目录 1.替换所有的问号 1.1…

eclipse导入svn项目

1、配置maven 2、用svn引入项目 3一直点击next,到最后选完成。

Orangedx:引领新一轮 BTCFi 浪潮

“OrangeDx 作为新一轮 BTCFi 浪潮引领者被市场寄予厚望 ,前不久在 FinceptorApp 的平台的公开销售 20 万美元的额度仅在几秒售罄,而其即将以 Startup 方式登陆 Gate 平台也同样备受市场期待。” 自 Ordinals 面向市场为比特币生态带来全新的资产发行方案…

函数作用域和块级作用域:JavaScript中的变量作用域解析

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

OpenGL学习笔记【4】——创建窗口,给窗口添加渲染颜色

一、前三章节的前情回顾 章节一:上下文(Context) OpenGL学习笔记【1】——简介-CSDN博客 章节一讲述了OpenGL在渲染的时候需要一个Context来记录了OpenGL渲染需要的所有信息和状态,可以把上下文理解成一个大的结构体,它里面记录了当前绘制使…

【@changesets/cli】变更集实战教程

一、背景概述 前端目前基于Monorepo架构的npm包开发很普遍,在开发完毕后,我们需要对包进行版本号升级,并且部署,这些操作如果是手动来操作的话,很麻烦,而且容易出错。 例如有这样的场景: -ap…

【可用Claude Opus模型】Claude3国内镜像站,亲测完全超越GPT-4(可用Claude Opus,官网价值20刀)

#今天在知乎看到一个问题:“平民不参与内测的话没有账号还有机会使用Claude 3吗?” 从去年GPT大火到现在,关于GPT的消息铺天盖地,真要有心想要去用,途径很多,别的不说,国内GPT的镜像站到处都是…