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,所以转换产生了不可预期的结果。所以使用强制转换时一定要保证两个数据类型一致,否则…

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文件 同时添加两个槽;来处理…

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

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

【综述】多核处理器芯片

文章目录 前言 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题! 完…

ChatGPT 网络安全秘籍(一)

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

【软件开发规范篇】JAVA后端开发编码格式规范

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是&#xff0…

公共 IP 地址与私有 IP 地址区别有哪些?

​  IP 地址是分配给互联网上每个设备的唯一数字 ID。 IP 地址可以在 Internet 上公开使用,也可以在局域网 (LAN)上私有使用。本文,我们主要探讨公共 IP 地址和私有 IP 地址之间的区别。 公共IP地址:公共IP地址是用于访问Internet的向外的I…

头歌:SparkSQL简单使用

第1关:SparkSQL初识 任务描述 本关任务:编写一个sparksql基础程序。 相关知识 为了完成本关任务,你需要掌握:1. 什么是SparkSQL 2. 什么是SparkSession。 什么是SparkSQL Spark SQL是用来操作结构化和半结构化数据的接口。…

AI家居设备的未来:智能家庭的下一个大步

🔒目录 ☂️智能家居设备的发展和AI技术的作用 ❤️AI技术实现智能家居设备的自动化控制和智能化交互的依赖 AI家居设备的未来应用场景 💣智能家庭在未来的发展和应用前景 💥智能家居设备的发展和AI技术的作用 智能家居设备的发展和AI技术的…

Liunx发布tomcat项目

Liunx在Tomcat发布JavaWeb项目 1.问题2.下载JDK3.下载Tomcat4.Tomcat本地JavaWeb项目打war包、解压、发布5.重启Tomcat,查看项目 1.问题 1.JDK 与 Tomcat 版本需匹配,否则页面不能正确显示 报错相关:Caused by: java.lang.ClassNotFoundException: java…

优化NGINX性能:使用NGINX_THREADS提高并发处理能力

目录标题 1. 什么是NGINX_THREADS?2. 配置NGINX_THREADS3. 使用NGINX_THREADS处理耗时操作4. 性能调优5. 结论 NGINX作为一个高性能的HTTP和反向代理服务器,在处理高并发请求时表现出色。但随着互联网应用对性能要求的不断提高,深入了解和优化…

DA14531如何配置SDK工程路径

1 前言 当我们获取一个DA14531的工成样列,有时是不包括SDK中的公共部分的代码,只有用户项目代码。而想拷贝到自己的SDK中,如:F:\A02_Work\A01_Dailog\DA145xx_SDK\6.0.18.1182.1\projects\User\ble_app_sensor,打开工…

高颜值管理系统界面,我敢保证你肯定看不够,看了又看。

有不少老铁,还坚持10年前的老思路,总觉得B端管理系统颜值不颜值不重要,关键是好用就行,这就犯了二元论的错误。 谁说高颜值的管理系统,就不好用了呢?高颜值和易用性冲突吗?我看未必吧。看看大厂…

羊大师:羊奶与传统牛奶在健康方面的差异

羊大师:羊奶与传统牛奶在健康方面的差异 羊奶与传统牛奶在健康方面的差异主要体现在以下几个方面: 营养成分:羊奶与传统牛奶在营养成分上有所不同。羊奶中含有更多的维生素A、碳水化合物、烟酸以及磷,而牛奶在钙、蛋白质和锌的含…