随机森林算法实现分类

news2024/10/7 12:22:48

随机森林算法实现对编码后二进制数据的识别

1.直接先上代码!
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler
from joblib import dump, load
# 读取数据
data = pd.read_excel('/root/分类数据集.xlsx', sheet_name=0)

# 提取特征和标签
binary_strings = data["编码后数据"].values
y = data["类型"]

max_length = max(len(s) for s in binary_strings)
X = np.array([list(map(int, s.zfill(max_length))) for s in binary_strings])

# 样本标签数值化处理
target_map = {"ldpc": 0, "han": 1, "conv": 2}
target = y.map(target_map)

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

# 特征缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 创建随机森林分类器实例
rf = RandomForestClassifier(random_state=42)

# 定义超参数搜索空间
param_grid = {
    'n_estimators': [100, 200],  # 决策树的数量
    'max_depth': [None, 10, 20],  # 树的最大深度
    'min_samples_split': [2, 5],  # 分裂内部节点所需的最小样本数
    'min_samples_leaf': [1, 2],   # 叶节点所需的最小样本数
    'bootstrap': [True, False]    # 是否使用bootstrap样本
}

# 创建GridSearchCV实例
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5, scoring='accuracy', n_jobs=-1)

# # 用GridSearchCV在给定的超参数网格上进行搜索
grid_search.fit(X_train_scaled, y_train)
# 使用找到的最佳参数的模型进行预测
best_rf = grid_search.best_estimator_
# 保存模型到文件
model_filename = 'best_random_forest64.joblib'
dump(best_rf, model_filename)
# 保存 StandardScaler
scaler_filename = 'scaler64.joblib'
dump(scaler, scaler_filename)
# 假设 max_length 已经在您的代码中计算出来了
max_length_filename = 'max_length64.joblib'
dump(max_length, max_length_filename)
y_pred = best_rf.predict(X_test_scaled)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy on test set with best parameters: {accuracy:.2f}")
2.代码解读

这是一个典型的机器学习流程,用于构建和评估一个随机森林分类器。

  1. 导入必要的库
    • numpypandas 用于数据处理。
    • train_test_splitGridSearchCV 来自 sklearn.model_selection,用于划分数据集和超参数优化。
    • RandomForestClassifier 来自 sklearn.ensemble,是用于分类的随机森林模型。
    • accuracy_score 来自 sklearn.metrics,用于计算模型准确度。
    • StandardScaler 来自 sklearn.preprocessing,用于特征缩放。
    • dumpload 来自 joblib,用于模型和数据的保存和加载。
  2. 数据加载
    • 使用 pandasread_excel 函数从 Excel 文件中加载数据。
  3. 特征和标签提取
    • 将数据集中的“编码后数据”列转换为数值列表,并将“类型”列作为标签。
  4. 数据预处理
    • 确定最大长度以保证所有样本长度一致。
    • 使用 map 方法将标签转换为数值。
  5. 数据划分
    • 使用 train_test_split 将数据集划分为训练集和测试集。
  6. 特征缩放
    • 使用 StandardScaler 对训练集和测试集进行特征缩放。
  7. 模型初始化
    • 创建 RandomForestClassifier 实例。
  8. 超参数搜索
    • 定义一个超参数网格,包括决策树数量、树的最大深度等。
    • 使用 GridSearchCV 进行交叉验证和超参数搜索。
  9. 模型训练
    • 使用训练集数据训练模型,并找到最佳参数。
  10. 模型保存
    • 将最佳模型、标量器和最大长度保存到文件中。
  11. 模型评估
    • 使用测试集评估模型的准确度,并打印结果

通过这个过程,我们不仅展示了如何构建一个分类模型,还介绍了如何通过超参数优化来提高模型的性能。

3.数据集部分截图


就介绍到这里啦~~

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

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

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

相关文章

数据结构之堆(优先级队列)

前言 在上一章我们讲了二叉树,这一节我们来讲堆(优先级队列),所以想知道堆创建,可以看一下二叉树的一些简单概念。http://t.csdnimg.cn/4jUR6http://t.csdnimg.cn/4jUR6 目录 前言 堆 1.概念 2.优先级队列的模拟实…

Day06-Mybatis

1. Mybatis介绍 2. Mybatis连接数据库并返回数据事例 连接oracle数据的设置方式 spring.application.namespringboot-mybatis spring.datasource.driver-class-nameoracle.jdbc.OracleDriver spring.datasource.urljdbc:oracle:thin:192.168.100.66:1521:orcl spring.datasour…

每日一题《leetcode--59.螺旋矩阵 》

https://leetcode.cn/problems/spiral-matrix-ii/ 这道题跟我昨天发布的那道题一模一样,只需要注意这个矩阵是n*n。 文章代码如下: int** generateMatrix(int n, int* returnSize, int** returnColumnSizes) {int** array (int**)malloc(sizeof(int*) *…

Python | Leetcode Python题解之第118题杨辉三角

题目: 题解: class Solution:def generate(self, numRows: int) -> List[List[int]]:ret list()for i in range(numRows):row list()for j in range(0, i 1):if j 0 or j i:row.append(1)else:row.append(ret[i - 1][j] ret[i - 1][j - 1])ret…

HCIP-Datacom-ARST自选题库__BGP多选【22道题】

1.BGP认证可以防止非法路由器与BGP路由器建立邻居,BGP认证可以分为MD5认证和Keychain认证,请问以下哪些BGP报文会携带BCGP Keychain认证信息?(报头携带) open Update Notication Keepalive 2.传统的BGP-4只能管理IPv4单播路由信息,MP-B…

总线带宽(总线系统的数据传送速率)

定义 总线上每秒钟传输的最大字节数或比特数 表示方法 通常使用“比特率”来表示,单位为比特每秒(bps,b/s)。 计算公式 总线带宽总线宽度/传输周期 其中,总线宽度是指数据总线的位数(单位&#xff1a…

GBB和Prob IoU[旋转目标检测理论篇]

在开始介绍YOLOv8_obb网络之前,需要先介绍一下arxiv.org/pdf/2106.06072 这篇文章的工作,因为v8_obb就是基于这篇论文提出的GBB和prob IoU来实现旋转目标检测的。 1.高斯分布 一维高斯分布的规律是中间高两边低,且当x为均值的时候取到最大值,表达式如下,标准正态分布图如…

数据库(10)——图形化界面工具DataGrip

以后关于数据库的图片演示就使用DataGrip了 : ) 创建数据库和表 在连接上数据库之后,可以选择Schema创建一个新的数据库。 点击OK后,就已经创建了一个空的表。 要在数据库中建立一张新的表,右键数据库,点击new table 要给新表添…

基于开源项目HAL STM32F4 +DSP库跑SVPWM开环速度测试

HAL STM32F4 ARM DSP库跑SVPWM开环速度测试 ✨本篇硬件电路和代码来源于此开源项目:https://github.com/MengYang-x/STM3F401-FOC/tree/main📍硬件电路和项目介绍,立创开源广场:https://oshwhub.com/shadow27/tai-yang-neng-wu-re…

STL库--string

目录 string的定义 string中内存的访问 string常用函数实例解析 string的定义 定义string的方式跟基本类型相同,只需要在string后跟上变量名即可: string str; 如果要初始化,可以直接给string类型的变量进行赋值: string s…

Visual Studio 的使用

目录 1. 引言 2. 安装和配置 2.1 系统要求 2.2 安装步骤 2.3 初次配置 3. 界面介绍 3.1 菜单栏和工具栏 3.2 解决方案资源管理器 3.3 编辑器窗口 3.4 输出窗口 3.5 错误列表 3.6 属性窗口 4. 项目管理 4.1 创建新项目 4.2 导入现有项目 4.3 项目属性配置 5. 代…

stm32-DMA转运数据

在配置前要记得先定义一下DMA转运的源端数组和目标数组两个数组哦。 接下来我们就开始准备配置吧 配置 初始化 1.RCC开启时钟(开启DMA的时钟) void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState) 作用:开启时…

kafka-生产者发送消息消费者消费消息

文章目录 1、生产者发送消息&消费者消费消息1.1、获取 kafka-console-producer.sh 的帮助信息1.2、生产者发送消息到某个主题1.3、消费主题数据 1、生产者发送消息&消费者消费消息 1.1、获取 kafka-console-producer.sh 的帮助信息 [rootlocalhost ~]# kafka-console…

详解make file中的notdir

在 Makefile 中,$(notdir names…) 是一个函数,用于获取一组文件名或路径中的文件名部分,并将其返回。 这个函数通常用于从给定的路径中提取文件名部分,非常适合在 Makefile 中进行文件处理操作。 语法: makefile C…

基于单片机智能防触电装置的研究与设计

摘 要 : 针对潮湿天气下配电线路附近易发生触电事故等问题 , 对单片机的控制算法进行了研究 , 设 计 了 一 种 基 于 单片机的野外智能防触电装置。 首先建立了该装置的整体结构框架 , 再分别进行硬件设计和软件流程分析 &#xf…

从零开始写 Docker(十六)---容器网络实现(上):为容器插上”网线”

本文为从零开始写 Docker 系列第十六篇,利用 linux 下的 Veth、Bridge、iptables 等等相关技术,构建容器网络模型,为容器插上”网线“。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实…

邀请媒体参会,媒体邀约的正确打开方式

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 邀请媒体参会是一项重要的公关活动,需要细致的规划和执行。以下是一些步骤和建议,可以帮助你更有效地进行媒体邀约: 1. 拟定邀约媒体名单:…

启智CV机器人,ROS

资料: https://wiki.ros.org/kinetic/Installation/Ubuntu https://blog.csdn.net/qq_44339029/article/details/120579608 装VM。 装ubuntu20.04 desktop.iso系统。 装vm工具: sudo apt update sudo dpkg --configure -a sudo apt-get autoremove o…

可燃气体报警器检测周期:如何合理设定以满足安全需求?

可燃气体报警器作为工业安全和生产环境中不可或缺的安全防护设备,其准确性、稳定性和及时响应性对于防止火灾和爆炸事故具有重要意义。 因此,合理设定并严格执行可燃气体报警器的检测周期,是确保安全与可靠运行的核心环节。 一、检测周期的重…

轻兔推荐 —— 一个好用的软件服务推荐平台

给大家推荐一个好用的的软件服务推荐平台:轻兔推荐 网站界面简洁大方,没有太多杂七杂八的功能和页面,有明暗主题色可以选择,默认为亮色,可在网站上方手动切换。 每工作日都会推荐一款软件,有时会加更&…