机器学习 之 决策树与随机森林的实现

news2025/1/12 21:01:59
引言

随着互联网技术的发展,垃圾邮件过滤已成为一项重要的任务。机器学习技术,尤其是决策树和随机森林,在解决这类问题时表现出色。本文将介绍随机森林的基本概念,并通过一个具体的案例——筛选垃圾电子邮件——来展示随机森林的实际应用。

随机森林简介

随机森林是一种基于决策树的集成学习方法,它通过构建多个决策树并综合它们的预测结果来提高准确性和防止过拟合。随机森林的工作原理主要包括以下几个步骤:

  1. 自助采样:从原始数据集中通过有放回的方式抽取多个子样本集。
  2. 构建决策树:在每个子样本集上独立地构建一棵决策树。
  3. 随机特征选择:在构建每棵树的过程中,每个节点的分裂都是从所有特征的一个随机子集中选出最优特征。
  4. 投票机制:对于分类任务,每棵树都会对新样本给出一个预测类别,最终的预测类别是所有树预测结果的多数表决结果。

随机森林的优点包括:

  • 鲁棒性:由于使用了多棵决策树,单棵树的错误不会影响整体预测结果。
  • 易于实现:随机森林的实现相对简单,并且不需要太多的参数调整。
  • 并行计算:每棵树可以独立构建,这使得随机森林非常适合于并行计算环境。
  • 特征重要性:可以评估特征的重要性,帮助选择最具影响力的特征。
实验数据介绍

本次实验使用的数据集名为 spambase.xlsx。数据集包含了用于识别垃圾邮件的特征,其中包括:

  • 单词频率 (Word_freq_makeWord_freq_address, 等):特定单词在邮件中出现的频率。
  • 字符频率 (Char_freq1Char_freq2, 等):特定字符在邮件中出现的频率。
  • 大写字母连续长度统计 (Capital_run_length_averageCapital_run_length_longest, 等):大写字母连续出现的平均长度和最长长度。
  • 标签 (label):邮件是否为垃圾邮件,0表示非垃圾邮件,1表示垃圾邮件。

实例:随机森林实现垃圾邮件筛选
加载数据

首先,我们需要使用Pandas库加载Excel文件中的数据。

import pandas as pd

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

# 分割特征和标签
X = df.iloc[:, :-1]  # 特征列
y = df.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=100)
构建随机森林模型

现在,我们使用RandomForestClassifier类构建一个随机森林模型,并设置相关的超参数

from sklearn.ensemble import RandomForestClassifier

# 创建随机森林分类器
rf = RandomForestClassifier(
    n_estimators=108,  # 决策树的数量
    max_features=0.8,  # 最大特征数量比例
    random_state=0     # 随机种子
)

# 训练模型
rf.fit(xtrain, ytrain)
模型评估

最后,我们将评估模型在训练集和测试集上的表现。

from sklearn import metrics
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix

# 定义混淆矩阵函数
def cm_plot(y, yp):
    cm = confusion_matrix(y, yp)

    plt.matshow(cm, cmap=plt.cm.Blues)
    plt.colorbar()

    for x in range(len(cm)):
        for y in range(len(cm)):
            plt.annotate(cm[x, y], xy=(y, x), horizontalalignment='center',
                         verticalalignment='center')

    plt.ylabel('True label')  # 真实标签
    plt.xlabel('Predicted label')  # 预测标签
    return plt

# 在训练集上进行预测
train_predicted = rf.predict(xtrain)

# 输出训练集上的分类报告
print("Training Set Classification Report:")
print(metrics.classification_report(ytrain, train_predicted))

# 绘制训练集上的混淆矩阵
cm_plot(ytrain, train_predicted).show()

# 在测试集上进行预测
test_predicted = rf.predict(xtest)

# 输出测试集上的分类报告
print("Test Set Classification Report:")
print(metrics.classification_report(ytest, test_predicted))

# 绘制测试集上的混淆矩阵
cm_plot(ytest, test_predicted).show()
 输出结果:

训练集各指标报告:

训练集混淆函数: 

预测集各指标报告:

预测集混淆矩阵

结论

随机森林是一种强大的机器学习算法,能够有效地处理分类和回归任务。通过上述代码,我们已经成功地使用随机森林对spambase.xlsx数据集进行了训练和评估。从输出的分类报告和混淆矩阵中可以看出模型的性能情况。随机森林因其简单易用和高效的特点,在许多实际应用中都取得了很好的效果。

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

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

相关文章

【Qt】输入类控件QTextEdit

目录 输入类控件QTextEdit 例子:获取多行输入框的内容 例子:验证输入框的各种信号 输入类控件QTextEdit QTextEdit表示多行输入框,也是一个富文本&markdown编辑器。 并且能在内容超出编辑框范围时自动提供滚动条 在Qt中,有俩…

前端CSS选择器

css 和html 三种表示方式 行内样式 >内部样式>外部样式 元素选择器 属性选择器 id选择器 选择id为bb的 ,给他增添样式 class选择器以 .开头 用法和id差不都 包含选择器和父子选择器 兄弟选择器 选择器组合 伪元素选择器 首字母格式不一样 首行格式不一样 …

java设计模式--创建型设计模式

创建型模式可分为:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式 单例模式 单例模式 就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个获取其对象的方法(静态方法&#xf…

Unity编辑器扩展之Project视图扩展

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity编辑器扩展之Project视图扩展 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取&#xff01…

河南萌新联赛2024第(六)场:郑州大学(补题ABCDFGIL)

文章目录 河南萌新联赛2024第(六)场:郑州大学A 装备二选一(一)简单介绍:思路:代码: B 百变吗喽简单介绍:思路:代码: C 16进制世界简单介绍&#x…

第二十七节、人物可互动标识

一、多个场景同时存在 方法:将另一个场景拖拽进 当前场景中 这样在一个场景中保存物体,另一个场景切换即可 创建一个场景名为上图(这是一个持久化的场景) 被激活的场景是粗体字的 二、代码 使用第二个代码获得player的子物体 …

uniapp在线下载安装包更新app以及热更新

首先用getSystemInfo判断平台、 再通过json文件模拟接口 判断版本号是否一致 不一致则下载服务器apk进行更新 外加网络波动导致失败重新下载更新包 uni.getSystemInfo({success: function (e) {// #ifndef H5// 获取手机系统版本const system e.system.toLowerCase();const pl…

《黑神话:悟空》解锁+35项修改器,开启上帝模式!

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 8 月 20 日,国产 3A 大作《黑神话:悟空》闪亮登场!这是一款由中国游戏开发商游戏科学开发的动作角色扮演游戏,此前在研发阶段就备受关注…

Python 使用 matplotlib 显示图像

如果没有安装 matplotlib 需要先安装: pip install matplotlib一、读取图片并显示 import matplotlib.pyplot as pltimage_path "/Users/AlanWang4523/Desktop/Debug/files/image.png" image_array plt.imread(image_path)plt.figure("ImageShow…

会声会影作为视屏制作软件如何?会声会影最新免费版

二、核心功能与特点 拖放式编辑:会声会影2024提供了拖放式标题、转场、覆叠和滤镜功能,使得视频编辑变得更加直观和高效。 色彩分级与动态分屏:软件支持色彩分级功能,可以对视频进行精细的色彩调整。同时,动态分屏功能…

STM32通用定时器,端口复用和重映射

STM32定时器是一种内置在STM32微控制器中的硬件模块,用于测量和控制时间。它具有高精度、可配置性和灵活性的特点,能够支持多种不同的工作模式和应用场景。以下是对STM32定时器的详细讲解: 一、定时器的基本构成 STM32定时器主要由以下几个…

内存管理————基础理解

目录 我们先看以下代码和内存分布图 对一些名词的解释说明: 题目 答案 问题解释: C语言中动态内存管理方式 C语言中动态内存管理方式:malloc/calloc/realloc/free 这里提一下要注意的点 C内存管理方式 基本内容 new/delete操作内置…

常用API:object

文章目录 Object类toString()方法equals()方法总结其他方法 黑马学习笔记 Object类 是所有类的父类,所有的类都默认继承Object类。Java中所有的类的对象都可以直接使用Object类提供的一些方法。 toString()方法 equals()方法 默认是判断两个对象的地址 也是判断…

MATLAB-疲劳检测

首先,我们需要解决一个问题,什么样可以视为疲劳? 频繁的眨眼/眨一次眼所用时间很长 不停的打哈欠 不停的点头 通过分析,我们得到了检测疲劳的三个标准:眨眼,打哈欠,头部姿态。 这三个标准可以…

OpenCV findTours函数及其用法

OpenCV findTours函数主要用以寻找图像中物体的轮廓,其原型如下: indTours 函数参数: Image 输入图像,需8位单通道图像。非零像素被视为1。零像素保持为0,因 此图 像被视为 二进制。您可以使用co…

【数据分享】《全国能源-分行业煤油消费总量》(2000-2020年)

而今天要限时免费分享的数据就是2000-2020年间出版的《全国能源-分行业煤油消费总量》并以多格式提供免费下载。(无需分享朋友圈即可获取) 数据介绍 在过去的二十年里,中国作为全球能源消费的重要力量,其能源结构的变化不仅影…

基于x86 平台opencv的图像采集和seetaface6的图像质量评估功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.2 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的图像质量评估功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的图像质量评估模块…

21.1 基于Netty实现聊天

21.1 基于Netty实现聊天 一. 章节概述二. `Netty`介绍三. 阻塞与非阻塞1. 阻塞与非阻塞简介2. BIO同步阻塞3. NIO同步非阻塞4. AIO异步非阻塞IO5. 异步阻塞IO(用的极少)6. 总结四. Netty三种线程模型1. 单线程模型2. 多线程模型3. 主从线程模型五. 构建Netty服务器************…

DDL——三范式与表约束

目录 一、三大范式 1.范式的定义 2.第一范式 3.第二范式 4.第三范式 二、表约束 1.约束的定义 2.非空约束(not null) 3.唯一性约束(unique) 4.主键约束(primary key) 5.外键约束(fo…

可集成多模型的机器人开发框架 dora:让机器人编程走向大众

作者 | Annie Xu 责编 | 何苗 出品 | GOSIM 开源创新汇 C 和 C是机器人编程中常用的编程语言,但学起来存在一定难度。那些对机器人感兴趣,但没有精力花费数周时间学习 C 和 C编程的用户只能望而却步。 为了让机器人技术变得更简单,陶海轩&a…