【Sklearn】基于随机森林算法的数据分类预测(Excel可直接替换数据)

news2024/11/24 21:06:55

【Sklearn】基于随机森林算法的数据分类预测(Excel可直接替换数据)

  • 1.模型原理
    • 1.1 模型原理
    • 1.2 数学模型
  • 2.模型参数
  • 3.文件结构
  • 4.Excel数据
  • 5.下载地址
  • 6.完整代码
  • 7.运行结果

1.模型原理

随机森林(Random Forest)是一种集成学习方法,通过组合多个决策树来构建强大的分类或回归模型。随机森林的模型原理和数学模型如下:

1.1 模型原理

随机森林是一种集成学习方法,它结合了多个决策树来改善预测的准确性和鲁棒性。每个决策树都是独立地训练,并且它们的预测结果综合起来形成最终的预测。随机森林的主要思想是构建一个“森林”,其中每棵树都是一个分类器,而每个分类器都在随机的数据子集上进行训练。在预测时,通过投票或平均来综合所有分类器的结果。

随机森林的主要步骤:

  1. 随机抽样(Bootstrap抽样): 从原始训练数据中随机抽取多个样本,允许同一个样本在一个抽样中出现多次,形成一个新的训练集。

  2. 随机特征选择: 对每个决策树的训练过程中,在节点分裂时,只考虑部分特征,而不是全部特征。这样有助于增加树之间的多样性,减少过拟合。

  3. 独立训练: 对于每个样本和每个决策树,使用随机抽样的训练数据和随机选择的特征进行训练,得到多棵独立的决策树。

  4. 预测聚合: 在预测时,将每棵树的预测结果进行投票(分类问题)或平均(回归问题),以决定最终的分类或预测值。

1.2 数学模型

随机森林的数学模型是由多个决策树组成的集合,每个决策树都是一个独立的分类器或回归器。随机森林的预测是通过对每个决策树的预测结果进行综合得到的。可以用以下形式表示:

F ( x ) = 1 T ∑ t = 1 T f t ( x ) F(x) = \frac{1}{T} \sum_{t=1}^{T} f_t(x) F(x)=T1t=1Tft(x)

其中, F ( x ) F(x) F(x)表示随机森林的预测结果, T T T表示决策树的数量, f t ( x ) f_t(x) ft(x)表示第 t t t棵决策树的预测结果。

在训练每棵决策树时,随机森林通过随机抽样和随机特征选择增加了每棵树之间的多样性,从而减少了过拟合的风险。在预测时,通过对多个决策树的预测结果进行综合,提高了模型的准确性和稳定性。

总之,随机森林通过构建多个独立的决策树,并对它们的预测结果进行综合,从而创建了一个强大的集成模型,适用于分类和回归任务。

2.模型参数

RandomForestClassifierscikit-learn中随机森林分类器的类,它具有多个参数可以调整。以下是你提到的参数以及它们的说明:

  1. n_estimators: 随机森林中决策树的数量。默认为100。

  2. criterion: 衡量分割质量的标准。可以是"gini"(基尼系数)或"entropy"(信息熵)。默认是"gini"。

  3. max_depth: 决策树的最大深度。默认为None,表示不限制深度。

  4. min_samples_split: 节点分裂所需的最小样本数。默认为2。

  5. min_samples_leaf: 叶节点所需的最小样本数。默认为1。

  6. min_weight_fraction_leaf: 叶节点所需的最小权重分数总和。默认为0。

  7. max_features: 寻找最佳分割时要考虑的特征数量。可以是整数、浮点数、字符串或None。默认是"auto",意味着"sqrt(n_features)"。

  8. max_leaf_nodes: 最大叶节点数。默认为None。

  9. min_impurity_decrease: 分割需要达到的最小不纯度减少量。默认为0。

  10. bootstrap: 是否对数据进行有放回抽样。默认为True。

  11. oob_score: 是否计算袋外(oob)准确率。默认为False。

  12. n_jobs: 并行处理的作业数。默认为None,表示使用1个作业。

  13. random_state: 随机数生成器的种子,用于重现随机结果。

  14. class_weight: 类别权重,用于处理不平衡数据集。

  15. verbose: 控制训练过程中的输出信息。默认为0,不显示输出。

这些参数可以根据你的数据集和问题进行调整,以获得最佳的模型性能。

3.文件结构

在这里插入图片描述

iris.xlsx						% 可替换数据集
Main.py							% 主函数

4.Excel数据

在这里插入图片描述

5.下载地址

- 资源下载地址

6.完整代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns

def random_forest_classification(data_path, test_size=0.2, random_state=42):
    # 加载数据
    data = pd.read_excel(data_path)

    # 分割特征和标签
    X = data.iloc[:, :-1]  # 所有列除了最后一列
    y = data.iloc[:, -1]   # 最后一列

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

    # 创建随机森林分类器
    # 1. ** n_estimators: ** 随机森林中决策树的数量。默认为100。
    # 2. ** criterion: ** 衡量分割质量的标准。可以是"gini"(基尼系数)或"entropy"(信息熵)。默认是"gini"。
    # 3. ** max_depth: ** 决策树的最大深度。默认为None,表示不限制深度。
    # 4. ** min_samples_split: ** 节点分裂所需的最小样本数。默认为2。
    # 5. ** min_samples_leaf: ** 叶节点所需的最小样本数。默认为1。
    # 6. ** min_weight_fraction_leaf: ** 叶节点所需的最小权重分数总和。默认为0。
    # 7. ** max_features: ** 寻找最佳分割时要考虑的特征数量。可以是整数、浮点数、字符串或None。默认是"auto",意味着"sqrt(n_features)"。
    # 8. ** max_leaf_nodes: ** 最大叶节点数。默认为None。
    # 9. ** min_impurity_decrease: ** 分割需要达到的最小不纯度减少量。默认为0。
    # 10. ** bootstrap: ** 是否对数据进行有放回抽样。默认为True。
    # 11. ** oob_score: ** 是否计算袋外(oob)准确率。默认为False。
    # 12. ** n_jobs: ** 并行处理的作业数。默认为None,表示使用1个作业。
    # 13. ** random_state: ** 随机数生成器的种子,用于重现随机结果。
    # 14. ** class_weight: ** 类别权重,用于处理不平衡数据集。
    # 15. ** verbose: ** 控制训练过程中的输出信息。默认为0,不显示输出。
    model = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=random_state)

    # 在训练集上训练模型
    model.fit(X_train, y_train)

    # 在测试集上进行预测
    y_pred = model.predict(X_test)

    # 计算准确率
    accuracy = accuracy_score(y_test, y_pred)
    return confusion_matrix(y_test, y_pred), y_test.values, y_pred, accuracy

if __name__ == "__main__":
    # 使用函数进行分类任务
    data_path = "iris.xlsx"
    confusion_mat, true_labels, predicted_labels, accuracy = random_forest_classification(data_path)

    print("真实值:", true_labels)
    print("预测值:", predicted_labels)
    print("准确率:{:.2%}".format(accuracy))

    # 绘制混淆矩阵
    plt.figure(figsize=(8, 6))
    sns.heatmap(confusion_mat, annot=True, fmt="d", cmap="Blues")
    plt.title("Confusion Matrix")
    plt.xlabel("Predicted Labels")
    plt.ylabel("True Labels")
    plt.show()

    # 用圆圈表示真实值,用叉叉表示预测值
    # 绘制真实值与预测值的对比结果
    plt.figure(figsize=(10, 6))
    plt.plot(true_labels, 'o', label="True Labels")
    plt.plot(predicted_labels, 'x', label="Predicted Labels")

    plt.title("True Labels vs Predicted Labels")
    plt.xlabel("Sample Index")
    plt.ylabel("Label")
    plt.legend()
    plt.show()


7.运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

基于dbn+svr的交通流量预测,dbn详细原理

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) DBN+SVR的交通流量预测 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类算法,本文将DBN+SVR用于交通流量预测…

ML在2023年最成功的案例:ControlNet

一、说明 这里说的 ControlNet不是工业控制的控制网络,而是深度学习的神经网络植入某些控制环节,它是 2023 年 ML 领域最大的成功案例之一。这是一种简单,可解释的方式来对扩散模型的输出施加影响的模型。 二、ControlNet 是什么?…

【学习FreeRTOS】第7章——FreeRTOS临界段代码保护及调度器挂起与恢复

1.临界段代码保护简介 临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段,适用场合如: 外设:需严格按照时序初始化的外设:IIC、SPI等等系统:系统自身需求用户:用户…

p7付费课程笔记7:G1 GC

目录 前言 什么是G1 GC? 重要语义讲解 标记过程 注意事项 适用场景分析 应用建议 问题 常用配置参数 前言 上次我们讲了CMS GC, 这次我们讲解G1 GC;在开始之前我们要思考下我们为什么学G1 GC?学习后有什么好处? 成为更好的Java开…

安达发APS|生产计划排产软件助力加工制造业智能化转型

随着全球经济一体化的不断深入,市场竞争日益激烈,加工制造企业面临着巨大的生存压力。在这种情况下,企业对于生产计划的精细化管理需求日益迫切。为了适应这一市场需求,安达发推出了专门针对加工企业的APS生产计划排产软件&#x…

四、Linux中cd、pwd以及相对/绝对路径和特殊路径符

1、cd命令: cd命令可以切换当前工作目录,基础语法是: cd [linux路径] (1)、打开Linux的命令提示行,当前工作目录是home,输入“cd /”,可以切换到根目录下,在根目录下输…

限制编辑下的PDF可以转换其他格式吗?这2个方法可行

我们知道,PDF可以通过设置“限制编辑”来保护文件不被随意更改,那PDF设置了“限制编辑”还可以转换其他格式吗? 如果PDF设置的是禁止任何更改的“限制编辑”,那PDF菜单【转换】界面下的格式选项就会呈现灰色状态,无法…

不要服务器和技术代码,怎么做新生录取查询系统?

作为一名老师,我了解学生和家长们对录取情况的关注和期待,所以学校公布录取情况表是一项至关重要的工作。在这篇文章中,我将与大家分享学校公布录取情况表的步骤和流程,以帮助大家更好地了解录取情况。 首先,学校会对…

JS代码混淆加密有什么用?

JS加密、JS混淆,有这些用: 1、前端JS代码,如果不加密,它人可以随便copy、任意修改。自己写的代码,可以轻易成为别人的成果。 对JS代码混淆加密,则可以防止这种他人随意白嫖的问题,代码是自己辛…

你知道什么是Curriculum Training模型吗

随着深度学习技术的飞速发展,研究人员在不断探索新的训练方法和策略,以提高模型的性能和泛化能力。其中,Curriculum Training(课程学习)模型作为一种前沿的训练方法,引起了广泛的关注和研究。本文将深入探讨…

Leetcode链表篇 Day2

203. 移除链表元素 - 力扣(LeetCode) 1.暴力移除:分删除的为头结点和不为头节点 while删除头节点时:直接从下一个结点开始,headhead->next while不是头节点时:从head开始遍历(需记录的为 前继结点pre) 虚…

Nature子刊 |肠道宏病毒组揭示百岁老人长寿秘诀

发表期刊:nature microbiology 发表时间:2023 影响因子:28.3 DOI: 10.1038/s41564-023-01370-6 研究背景 衰老是一种不可逆转的自然过程,随着年龄的增长,机体诸多方面出现功能性下降,与衰老相关的疾病&a…

uniapp一套代码实现多端运行

一、为何使用uniapp uni-app 是一个使用 Vue.js 开发所有前端应用的开源框架,开发者编写一套代码,可发布到 iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)等…

第5章:神经网络

神经元模型 上述定义的简单单元即为神经元模型。 多层网络 误差逆传播算法 标准BP算法:参数更新非常频繁,可能出现抵消现象。积累BP算法:下降到一定程度上,进行下一步会非常缓慢。 过拟合 早停:划分训练集和验证集…

运维监控学习笔记8

在服务器端,我们添加了nginx-server的主机: 在解决Error问题的过程中,我还通过zabbix_get这个命令进行了测试,发现是没有的,后来确认是在web页面配置的过程中,我输错了密码。 yum install zabbix-getzabbi…

电脑怎么修改图片大小尺寸?

电脑怎么修改图片大小尺寸?图片作为我们工作和办公中常用的文件,承载了许多元素和重要内容。而在一些软件和设备应用的过程中,可能会对图片的尺寸有一定的要求,需要我们将图片尺寸进行修改、调整。同时,我们经常在一些…

HDMI接口的PCB布局布线要求

高清多媒体接口(High Definition Multimedia Interface),简称:HDMI,是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。随着技术的不断提升,HDMI的传输速率也不断的提升&#…

APFS 文件系统探究

本文的创作初衷是因为我发现从底层详解 APFS 的资料很少,所以自己来进行了一些探究和整理。 一点说明 如果你在看 APFS 的文档或者其他内容,不要把高层级的分区理解成 Windows 中的分区。因为 APFS 里卷(Volume)才是显示在“访达…

实战——OPenPose讲解及代码实现

一些前提 先思考下面几个问题; 1、什么是姿态估计? 参考:Point Detect任务,识别人体指定部分的关键点; 2、姿态估计中的难点是什么? 从干扰的角度,人体被遮挡对检测的影响很大;…

【枚举倍数+容斥】CF803 F

Problem - F - Codeforces 题意: 思路: 正难则反,考虑容斥 即考虑gcd ! 1的所有子序列个数 因为子序列内部无序,因此不算真正的子序列,考虑枚举倍数 根据经典套路,我们去枚举 gcd,然后去枚…