2024五一数学建模C题Python代码+结果表数据教学

2024五一数学建模竞赛(五一赛)C题保姆级分析完整思路+代码+数据教学

C题 煤矿深部开采冲击地压危险预测

第一问 导入数据

以下仅展示部分,完整版看文末的文章

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split, cross_val_score, KFold
from sklearn.metrics import classification_report, accuracy_score, confusion_matrix
def preprocess_dataframe(df):window = '60s'  # 窗口大小features = df.groupby(pd.Grouper(key='时间 (time)', freq=window)).agg({'声波强度 (AE)': ['mean', 'std', 'max', 'min']}).rename(columns={'mean': 'EMR_mean','std': 'EMR_std','max': 'EMR_max','min': 'EMR_min'})features.reset_index(inplace=True)features.fillna(0, inplace=True)def calculate_fft_features(signal):if isinstance(signal, pd.Series):signal = signal.values  # 将 Series 转换为 NumPy 数组if isinstance(signal, (list, tuple)):signal = np.array(signal)  # 将列表或元组转换为 NumPy 数组if isinstance(signal, (float, int)):signal = np.array([signal])  # 将单个数值转换为 NumPy 数组if signal.ndim > 1:signal = signal.squeeze()  # 如果信号的维度大于1,压缩维度为1# 快速傅里叶变换fft_values = np.fft.fft(signal)fft_abs = np.abs(fft_values)return np.mean(fft_abs), np.std(fft_abs), np.max(fft_abs)df['声波强度 (AE)'] = df['声波强度 (AE)'].astype(float)# 应用FFT并计算特征fft_features = df['声波强度 (AE)'].apply(calculate_fft_features)# 解压特征并添加到 DataFramedf['FFT_mean'], df['FFT_std'], df['FFT_max'] = zip(*fft_features)df['hour'] = df['时间 (time)'].dt.hourdf['minute'] = df['时间 (time)'].dt.minutedf['weekday'] = df['时间 (time)'].dt.weekdaydf['is_weekend'] = df['weekday'].apply(lambda x: 1 if x >= 5 else 0)rolling_window = 10  # 使用10个数据点的窗口df['rolling_mean'] = df['声波强度 (AE)'].rolling(window=rolling_window).mean()df['rolling_std'] = df['声波强度 (AE)'].rolling(window=rolling_window).std()df['rolling_mean'].fillna(df.iloc[10,-2], inplace=True)df['rolling_std'].fillna(df.iloc[10,-1], inplace=True)df['diff_1'] =  df['声波强度 (AE)'].diff(1)  # 一阶差分df['diff_2'] =  df['声波强度 (AE)'].diff(2)  # 二阶差分df['diff_1'].fillna(0, inplace=True)df['diff_2'].fillna(0, inplace=True)#     q = np.percentile(df['声波强度 (AE)'], 75)
#     data_modified = [1 if x > q else 0 for x in df['声波强度 (AE)']]
#     df['高频信号'] = data_modified# 数据预处理
#     df['类别 (class)_encoded'], class_categories = pd.factorize(df['类别 (class)'])return dftrain_df = pd.read_excel("./附件1 (Attachment 1).xlsx",sheet_name='AE')
train_dfprocessed_df = preprocess_dataframe(train_df)
processed_df['类别 (class)_encoded'], class_categories = pd.factorize(processed_df['类别 (class)'])
q = np.percentile(processed_df['声波强度 (AE)'], 80)
data_modified = [1 if x > q else 0 for x in processed_df['声波强度 (AE)']]
processed_df['干扰信号'] = data_modified
processed_df# 分离特征和目标变量
X = processed_df.drop(['时间 (time)','类别 (class)','干扰信号','类别 (class)_encoded'], axis=1)  # 假设目标变量列名为'类别'
# X = processed_df.drop(['时间 (time)','类别 (class)','干扰信号'], axis=1)  # 假设目标变量列名为'类别'
y = processed_df['干扰信号']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
X_train.head()

集成随机森林代码:

rf_model = RandomForestClassifier(n_estimators=100, random_state=42)  # 100棵树rf_model.fit(X_train, y_train)
y_pred = rf_model.predict(X_test)# 打印准确率
print("Accuracy:", accuracy_score(y_test, y_pred))# 打印分类报告
print("Classification Report:\n", classification_report(y_test, y_pred))# 混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:\n", conf_matrix)# 可视化混淆矩阵
plt.figure(figsize=(8, 6))  
plt.imshow(conf_matrix, interpolation='nearest', cmap=plt.cm.Blues)
plt.title('Confusion Matrix')
plt.colorbar()
tick_marks = np.arange(len(np.unique(y)))
plt.xticks(tick_marks, np.unique(y), rotation=45)
plt.yticks(tick_marks, np.unique(y))
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.show()

第一问结果表:(csv文件)

第二问xgboost混淆矩阵:

from xgboost import XGBClassifierxgb_model = XGBClassifier(n_estimators=100, learning_rate=0.1, max_depth=3)
xgb_model.fit(X_train, y_train)
y_pred_xgb = xgb_model.predict(X_test)
print("XGBoost Accuracy:", accuracy_score(y_test, y_pred_xgb))conf_matrix = confusion_matrix(y_test, y_pred_xgb)
sns.heatmap(conf_matrix, annot=True, fmt='d')
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.title('Confusion Matrix')
plt.show()

第三问部分代码:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 转换为PyTorch张量
X_train_tensor = torch.tensor(X_train.values, dtype=torch.float32)
y_train_tensor = torch.tensor(y_train.values, dtype=torch.float32)
X_test_tensor = torch.tensor(X_test.values, dtype=torch.float32)
y_test_tensor = torch.tensor(y_test.values, dtype=torch.float32)# 创建数据加载器
train_data = TensorDataset(X_train_tensor, y_train_tensor)
test_data = TensorDataset(X_test_tensor, y_test_tensor)
train_loader = DataLoader(train_data, batch_size=64, shuffle=True)# 定义神经网络结构
class NeuralNetwork(nn.Module):def __init__(self):super(NeuralNetwork, self).__init__()self.layer1 = nn.Linear(X_train.shape[1], 64)self.layer2 = nn.Linear(64, 32)self.output_layer = nn.Linear(32, 1)self.relu = nn.ReLU()def forward(self, x):x = self.relu(self.layer1(x))x = self.relu(self.layer2(x))x = torch.sigmoid(self.output_layer(x))  # 使用sigmoid输出概率return x# 实例化模型、定义损失函数和优化器
model = NeuralNetwork()
criterion = nn.BCELoss()  # 二元交叉熵损失函数
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型
num_epochs = 10
for epoch in range(num_epochs):for inputs, labels in train_loader:outputs = model(inputs)loss = criterion(outputs.squeeze(), labels)optimizer.zero_grad()loss.backward()optimizer.step()print(f'Epoch {epoch+1}/{num_epochs}, Loss: {loss.item():.4f}')

其中更详细的思路,各题目思路、代码、讲解视频、成品论文及其他相关内容,可以点击下方群名片哦!

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

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

相关文章

基于Springboot的音乐翻唱与分享平台

基于SpringbootVue的音乐翻唱与分享平台设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 音乐资讯 音乐翻唱 在线听歌 后台登录 后台首页 用户管理 音乐资讯管理…

labview强制转换的一个坑

32位整形强制转换成枚举的结果如何? 你以为的结果是 实际上的结果是 仔细看,枚举的数据类型是U16,"1"的数据类型是U32,所以转换产生了不可预期的结果。所以使用强制转换时一定要保证两个数据类型一致,否则…

Python绝对路径及命令行执行路径的写法收录

Python绝对路径及命令行执行路径的写法 在Python中,以使用字符串来表示绝对路径。为了避免转义字符的问题,可以使用原始字符串(raw string)来表示路径。 直接r 后面路径是单或反斜杠均可,r让转义字符不起作用&#x…

【JavaEE网络】TCP套接字编程详解:从概念到实现

目录 TCP流套接字编程ServerSocket APISocket APITCP回显客户端服务器 TCP流套接字编程 TCP用的协议比UDP更多,可靠性 提供的api主要有两个类ServerSocket(给服务器使用的socket),Socket(既会给服务器使用也会给客户…

SQL server 使用教程

1.安装和配置SQL Server: 下载安装包:首先,你需要下载SQL Server的安装包。可以从Microsoft官方网站获取最新版的安装包链接,然后下载适用于你的操作系统的版本。 安装SQL Server:双击运行下载的安装包,按…

CentOS7安装MySQL8.3(最新版)踩坑教程

安装环境说明 项值系统版本CentOS7 (具体是7.9,其他7系列版本均可)位数X86_64,64位操作系统MySQL版本mysql-8.3.0-1.el7.x86_64.rpm-bundle.tar 实际操作 官网下载安装包 具体操作不记录,相关教程很多。 mkdir /o…

锂电池SOH预测 | 基于BP神经网络的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

QT5制做两个独立窗口

目录 增加第二个窗口 主窗口文件添加一个私有成员为子窗口 定义两个槽函数和 关联按钮和子窗口和主窗口 添加子窗口成员 子窗口处理函数 补充回顾 增加第二个窗口 1、 2、 3 主窗口文件添加一个私有成员为子窗口 在mainwidget.h文件 同时添加两个槽;来处理…

Linux 系统上安装 NVIDIA 驱动程序失败(X server问题)

报错信息: ERROR: You appear to be running an X server; please exit X before installing. For further details, please see the section INSTALLING THE NVIDIA DRIVER in the README available on the Linux driver download page at www.nvidia.com. ERROR: …

Docker: 如何不新建容器 修改运行容器的端口

目录 一、修改容器的映射端口 二、解决方案 三、方案 一、修改容器的映射端口 项目需求修改容器的映射端口 二、解决方案 停止需要修改的容器 修改hostconfig.json文件 重启docker 服务 启动修改容器 三、方案 目前正在运行的容器 宿主机的3000 端口 映射 容器…

vue2实现面包屑功能

目录 1. store/index.js 2. router/index.js 3. Header.vue 在Vue 2中实现面包屑导航是一种常见的前端实践,它可以帮助用户了解当前页面在网站结构中的位置,并快速导航到上一级或根目录。以下是使用Vue 2实现面包屑导航的基本步骤: 1. store/index.js state中定义一个面…

python 关键字(await)

2、await 在Python的异步编程中,await关键字扮演着至关重要的角色。对于初学者来说,理解await的使用和背后的概念可能有些困难,但对于有经验的开发者来说,掌握它则是编写高效、响应性强的代码的关键。下面我将从基础到高级,逐步解析await关键字。 基础知识:await是什么?…

NLP(11)--词向量

前言 仅记录学习过程,有问题欢迎讨论 one-hot 编码 i love u [1,2,3] 词向量训练目标: 如果两个词在文本出现,它的前后出现的词相似,则这两个词语义相似 cbow(基于窗口预测词)缺点 :输出层是vocab_size 会很大 收敛速度会很慢…

【综述】多核处理器芯片

文章目录 前言 Infineon处理器 AURIX™系列 TC399XX-256F300S 典型应用 开发工具 参考资料 前言 见《【综述】DSP处理器芯片》 Infineon处理器 AURIX™系列,基于TriCore内核,用于汽车和工业领域。 XMC™系列,基于ARM Cortex-M内核&…

test4282

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

2024五一杯数学建模A题思路分析-钢板最优切割路径问题

文章目录 1 赛题选题分析 2 解题思路3 最新思路更新 1 赛题 A题 钢板最优切割路径问题 提高钢板下料切割过程中的工作效率,是模具加工企业降低成本和增加经济效益的重要途径,其中钢板切割的路径规划是钢板切割过程的一个关键环节。 钢板切割就是使用特殊…

2024 五一杯高校数学建模邀请赛(C题)| 煤矿深部开采冲击地压危险预测 |建模秘籍文章代码思路大全

铛铛!小秘籍来咯! 小秘籍团队独辟蹊径,构建了这一题的详细解答哦! 为大家量身打造创新解决方案。小秘籍团队,始终引领着建模问题求解的风潮。 抓紧小秘籍,我们出发吧~ 让我们看看五一杯的C题! 完…

【Jenkins】持续集成与交付 (十二):Jenkins构建(Maven类型项目)和部署项目

🟣【Jenkins】持续集成与交付 (十二):Jenkins构建(Maven类型项目)和部署项目 一、安装Maven Integration插件二、创建Maven项目三、配置项目3.1 配置执行构建操作3.2 执行Maven项目构建3.3 部署项目3.5 再次构建3.4 验证访问四、总结💖The Begin💖点点关注,收藏不迷…

ChatGPT 网络安全秘籍(一)

原文:zh.annas-archive.org/md5/6b2705e0d6d24d8c113752f67b42d7d8 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 在不断发展的网络安全领域中,由 OpenAI 推出的 ChatGPT 所代表的生成式人工智能和大型语言模型(LLMs&#xf…

MATLAB初学者入门(30)—— 数据库开发

在MATLAB中实现数据库开发涉及连接数据库、执行SQL查询、处理查询结果以及将数据用于分析和可视化。MATLAB提供了数据库工具箱,该工具箱支持与多种数据库系统的连接,包括但不限于MySQL、Oracle、SQL Server、PostgreSQL等。 案例分析:使用MA…