机器学习-随机森林(全网最详解)

news2024/9/23 16:16:43

文章目录

  • 一、简介
    • 1.定义
    • 2.基本原理
    • 3.优缺点
    • 4.应用场景
  • 二、代码运用
    • 1.数据预处理
    • 2.模型训练
    • 3.模型评估
    • 4.绘制特征排名
  • 三、总结

一、简介

1.定义

随机森林(Random Forest)是一种集成学习方法,它通过构建多个决策树并将它们的预测结果进行汇总来提高预测的准确性。随机森林由Leo Breiman在2001年提出,它结合了“bagging”和“随机特征选择”的思想,以构建出具有强大预测能力的模型。

2.基本原理

  • Bagging(Bootstrap Aggregating):随机森林使用bootstrap抽样从原始数据集中随机抽取多个样本集,每个样本集的大小与原始数据集相同,但允许重复抽样。这样,每个决策树都是基于不同的样本集构建的,从而增加了模型的多样性。
  • 随机特征选择:在构建每棵决策树时,不是使用所有的特征,而是随机选择一部分特征(通常是总特征数的一个子集)来进行分裂。这个步骤进一步增加了模型的多样性,因为不同的树可能会基于不同的特征集进行分裂。
  • 决策树构建:对于每个bootstrap样本集,使用随机选择的特征集来构建一棵决策树。在构建过程中,通常不进行剪枝操作,因为随机森林通过集成多棵树来减少过拟合的风险。
  • 集成预测:对于分类问题,随机森林通过多数投票的方式来决定最终的分类结果;对于回归问题,则通过计算所有树的预测结果的平均值来得到最终的预测值。

3.优缺点

优点:

  • 高准确率:由于集成了多棵决策树,随机森林通常比单棵决策树具有更高的预测准确率。
  • 鲁棒性:随机森林对噪声和异常值具有较好的容忍度,不易受到它们的影响。
  • 易于使用:随机森林的参数相对较少,且通常不需要复杂的调参过程。
  • 能够评估特征的重要性:随机森林可以计算每个特征对模型预测结果的贡献度,从而帮助理解数据。
    缺点:
  • 过拟合:虽然随机森林通过集成多棵树来减少过拟合的风险,但如果树的数量过多或每棵树过于复杂,仍然有可能发生过拟合。
  • 计算成本:构建随机森林需要训练多棵决策树,因此计算成本相对较高,特别是在数据集较大或特征较多的情况下。
  • 解释性:虽然随机森林可以评估特征的重要性,但其决策过程相对复杂,不如单棵决策树那样直观易懂。

4.应用场景

随机森林广泛应用于各种领域,包括分类、回归、特征选择、异常检测等。在机器学习竞赛和实际应用中,随机森林因其良好的性能和易用性而备受青睐。

二、代码运用

随机森林是一种强大且灵活的机器学习算法,适用于许多不同的预测任务。这里我们通过对垃圾信息进行分类来测试并解释随机森林的用法。

1.数据预处理

import pandas as pd

# 读取数据
data = pd.read_csv('spambase.csv')

# 变量与标签分类
x = data.iloc[:, :-1]
y = data.iloc[:, -1]

from sklearn.model_selection import train_test_split

xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.2, random_state=0)

  • 数据读取:使用pandas库的read_csv函数读取名为spambase.csv的CSV文件,并将其存储在data变量中。
  • 变量与标签分类:使用iloc方法将数据集分为特征(x)和标签(y)。特征是所有列(除了最后一列),而标签是最后一列(假设最后一列是分类标签,即是否为垃圾邮件)。
  • 数据划分:使用train_test_split函数将数据集划分为训练集和测试集,测试集大小为20%,随机种子设置为0以确保结果的可重复性。

2.模型训练

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(
    n_estimators=100,
    max_features=0.8,  # 80%的特征
    random_state=0
)
rf.fit(xtrain, ytrain)
  • 参数设置:创建一个实例rf,设置参数,决策树的数量为100、每个决策树使用的特征比例为80%,随机种子为0。
  • 模型训练:使用训练集训练随机森林模型。

3.模型评估

from sklearn import metrics

train_predicted = rf.predict(xtrain)
score = rf.score(xtrain, ytrain)
print(metrics.classification_report(ytrain, train_predicted))
print(score)

test_predicted = rf.predict(xtest)
score = rf.score(xtest, ytest)
print(metrics.classification_report(ytest, test_predicted))
print(score)

  • 绘制混淆矩阵:使用训练集与测试集进行预测,并计算准确率和混淆矩阵,以评估模型在训练集上的性能。

在这里插入图片描述

4.绘制特征排名

import matplotlib.pyplot as plt
from pylab import mpl

importances = rf.feature_importances_  # 这个属性保存子模型特征的重要性
im = pd.DataFrame(importances, columns=["importances"])
clos = data.columns
clos_1 = clos.values
clos_2 = clos_1.tolist()
clos = clos_2[0:-1]
im['clos'] = clos

im = im.sort_values(by=['importances'], ascending=False)[:10]

mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus'] = False
index = range(len(im))
plt.yticks(index, im.clos)  # 用于设置或获取y轴的标签和维度位置
plt.barh(index, im['importances'])  # 创建水平条形图
plt.show()

  • 特征排名:获取随机森林模型中特征的重要性,并将其与原始特征名称结合,存储在im中。对im按特征重要性进行降序排序,并选取前10个最重要的特征。
  • 条形图绘制:使用matplotlib库绘制一个水平条形图,展示这些特征的重要性。通过设置字体和y轴标签,确保图表的可读性。
    在这里插入图片描述

三、总结

在评估使用随机森林模型的性能时,需要综合考虑多种评估方法和指标,以全面、客观地评估模型的性能。同时,还需要注意数据集的代表性和多样性,以避免过拟合或欠拟合等问题的发生。此外,对于不同的应用场景和数据集,可能需要选择不同的评估指标和参数设置来优化模型的性能。

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

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

相关文章

公司电脑被监控有什么表现?电脑监控VS员工隐私,员工合理摸鱼需知!职场小贴士为您解答!

公司电脑被监控有什么表现? 数字化办公日益普及,许多企业为了保障信息安全、提升工作效率,会选择在公司电脑上安装监控软件。这一举措在提升企业管理效能的同时,也引发了关于员工隐私与合理工作界限的讨论。本文将为您解析公司电…

k8s教程

1. k8s框架 - kubernetes的架构- Control Plane: 控制K8S集群的组件。- Api Server: 集群的访问入口。- etcd: 存储集群的数据。一般情况下,只有API-SERVER会访问.- Control Manager: 维护集群的状态。- Scheduler: 负责Pod的调度功能。- Wor…

防止拷贝电脑资料?【三种数据拷贝的详细方法分享!】

防止电脑资料被拷贝通常是指采取措施来保护敏感或专有信息不被未经授权的用户复制或传播。 这里我理解您可能想要了解的是如何防止数据被拷贝的方法,而不是进行数据拷贝的方法。 下面是一些常见的防止数据拷贝的策略和技术: 1. 物理安全控制 锁屏或密…

一篇讲完自动化基础-Python【万字详细讲解】

​ ​ 您好,我是程序员小羊! 前言 这篇文章主要学习Python的语法,为后续的自动化打基础 Python requests 接口自动化 Python selenium web 自动化 Python appium移动端自动化(手机 app) 这篇文章分六个阶段百分比进行划分,到时…

Elasticsearch:使用 semantic_text 进行语义搜索

警告:截止 8.15 版本,此功能处于测试阶段,可能会发生变化。设计和代码不如官方 GA 功能成熟,并且按原样提供,不提供任何保证。测试版功能不受官方 GA 功能的支持 SLA 约束。 本教程向你展示如何使用 semantic text 功能…

硬件检测工具箱 | 入梦工具箱 v8.8

入梦工具箱(RM Toolbox)是一款专为硬件检测、评分和测试设计的免费开源软件。它以其小巧的体积和简洁的界面,迅速成为DIY玩家和硬件爱好者的首选工具。 功能特点 集成常用硬件检测工具:包括CPUZ、GPUZ、AIDA64等,全面…

3种将4K视频转换成1080P格式的无损方法

用户总是倾向于将 4k 视频转换为 1080p,以便缩小它们并在兼容设备上观看。这种 4k 到 1080p 的转换被称为降频或降级,因为视频分辨率降低了。如果你想知道如何在不损失质量的情况下将 4k 缩小到 1080p,那么这是你找到答案的正确地方。阅读以下…

在idea中的git选择某一次记录拉出一个新分支

一 创建新分支 1.1 操作步骤 需求:需要在图中标红的历史记录,从此记录拉出一个分支 1.右键【new branch】 2.起一个新的名字: 3.新分支代码

HTTP协议相关知识

1 HTTP协议的解读 1.1 HTTP和HTTPS区别 HTTP协议:超文本传输协议是互联网上应用最为广泛的一种网络协议。所有的HTML文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法 HTTPS协议:HTTP协议的安全版,在HT…

快9月了才开始强化,刷张宇1000还是李林880?

如果你现在才开始强化,并且在张宇1000和李林880中间纠结,可以花5分钟看看这篇文章! 张宇1000题,今年进行了改版,去掉了一些「偏难怪」的题目,这类题目,对于大家的友好度明显上升。但是难度和综合…

springboot admin监控

服务端搭建 maven的依赖&#xff0c;包括服务端和客户端&#xff0c;以及注册到nacos上面 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XML…

游戏服务器租用多少钱一年?

游戏服务器租用多少钱一年&#xff1f;游戏服务器租用的价格范围非常广泛&#xff0c;从几百元到数万元不等。对于入门级或小型游戏服务器&#xff0c;一年的租用费用可能在几百到几千元之间&#xff1b;而对于高级或大型游戏服务器&#xff0c;一年的费用可能会超过数万元。 …

宽压宽频(35V/45V/65V)50KHZ-3MHZ双向同步降压升压LED驱动器QFP32封装

概述&#xff1a; PC9248 是一款双向降压-升压控制器&#xff0c;适用于驱动高效功率转换器中的硅&#xff08; Si&#xff09; MOSFET 或氮化镓&#xff08;GaN&#xff09;功率晶体管。它支持高达 45V 的宽输入和输出范围&#xff0c;可在降压、降压-升压和升压模式之间无缝…

XSS-复现dom破坏案例和靶场

目录 xss注入原理&#xff1a; xss是什么&#xff1f; xss原理&#xff1a; DOM&#xff1a; 闯关&#xff1a; 第一关&#xff1a;Ma Spaghet! 源码&#xff1a; 要求&#xff1a; 分析&#xff1a; 第二关&#xff1a; Jefff 源码&#xff1a; 要求&#xff1a; …

QT读取数据库中文显示乱码

QT读取数据库中文显示乱码 使用ODBC连接数据库时&#xff0c;选择Character Set为gbk格式

springboot中interceptor拦截器匹配URL源码

上一篇文章我们找到了filter过滤器的匹配源码&#xff0c;这次我们来找一下interceptor的匹配源码 同样先打断点看一下调用链 接着翻调用链&#xff0c;看看从哪里开始出现拦截器的 看到在这里出现了拦截器&#xff0c;那么就在这个类里面往上找&#xff0c;打断点慢慢找&…

Springcloud从零开始---Service业务模块(三)

上篇&#xff1a;Springcloud从零开始---Zuul&#xff08;二&#xff09;-CSDN博客 Service模块是客户端模块&#xff0c;用户编写业务逻辑代码和功能实现。前端请求发送到Zuul网关再有网关发送到Service服务&#xff0c;可以是系统的安全性提升。 开始继上篇Springcloud从零…

《计算机操作系统》(第4版)第4章 存储器管理 复习笔记

第4章 存储器管理 一、存储器的层次结构 1. 多层结构的存储器系统 如图4-1所示&#xff0c;在存储层次中越往上&#xff0c;存储介质的访问速度越快&#xff0c;价格也越高&#xff0c;相对存储容量也越小。 图4-1 计算机系统存储层次示意 2.三级存储系统 (1)Cache- 主存存储体…

数据结构——算法和算法分析

目录 算法和算法分析 算法 算法设计的要求 算法效率的度量 算法的存储空间需求 算法和算法分析 算法 算法是对特定问题求解步骤的一种描述&#xff0c;它是指令的有限序列&#xff0c;其中每一条指令表示一个或多个操作。 一个算法具有下列5个重要的特性&#xff1a; &…

轻松实现微服务间的无缝通信:OpenFeign入门指南

OpenFeign 前言1、导入依赖2、开启feign调用3、编写OpenFeign客户端4、Fegin接口实现5、Feign接口调用 前言 Spring Cloud OpenFeign是一种基于Spring Cloud的声明式REST客户端&#xff0c;它简化了与HTTP服务交互的过程。它将REST客户端的定义转化为Java接口&#xff0c;并且…