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)

    # 解压特征并添加到 DataFrame
    df['FFT_mean'], df['FFT_std'], df['FFT_max'] = zip(*fft_features)

    df['hour'] = df['时间 (time)'].dt.hour
    df['minute'] = df['时间 (time)'].dt.minute
    df['weekday'] = df['时间 (time)'].dt.weekday
    df['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 df

train_df = pd.read_excel("./附件1 (Attachment 1).xlsx",sheet_name='AE')
train_df

processed_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 XGBClassifier

xgb_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}')

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【报错处理】ib_write_bw执行遇到Found Incompatibility issue with GID types.原因与解决办法

文章目录 拓扑现象根因解决办法解决后效果 拓扑 #mermaid-svg-zheSkw17IeCpjnVA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-zheSkw17IeCpjnVA .error-icon{fill:#552222;}#mermaid-svg-zheSkw17IeCpjnVA .error…

PotatoPie 4.0 实验教程(34) —— FPGA实现摄像头图像二值化腐蚀效果

链接直达 https://item.taobao.com/item.htm?ftt&id776516984361 图像二值化腐蚀处理有什么作用? 图像二值化腐蚀处理在图像处理中起到了以下作用: 物体分割与提取:在图像二值化之后,通过腐蚀操作可以消除噪声、连接相邻的…

搜索Mysql的JSON字段的值

我们在查询mysql数据时,查询某个字段的数剧是我们经常接触的,直接使用sql语句或者更方便的直接使用数据库的orm语句查询。但是如果需要查询某个json字段里面的某些数据,orm模型可能都无法达到效果,还不如直接使用sql语句进行查询来…

国产化改造之容器迁移指导(未完)

一、背景 信创即信息技术应用创新的简称,涵盖了国产软件、国产芯片以及云计算等各个方向,也可以理解为常说的“ZZKK(自主可控)”, ZZKK是指对国内企事业单位应用系统中关键软硬件部件的安全性、可靠性、性能稳定性、安全接入等方面进行评估和测试的过程。信创的发展核心就…

(四)小程序学习笔记——自定义组件

1、组件注册——usingComponents (1)全局注册:在app.json文件中配置 usingComponents进行注册,注册后可以在任意页面使用。 (2)局部注册,在页面的json文件中配置suingComponents进行注册&#…

探索APP内测分发的全过程(APP开发)

什么是APP内测分发探索APP内测分发的全过程? APP内测分发是在应用程序开发过程中探索APP内测分发的全过程,开发者将应用程序的测试版或预发布版分发给特定用户进行测试、反馈和评估的一种方式。这是一个非常重要的环节,可以有效地提高应用的…

Linux:冯诺依曼体系结构、操作系统、初识进程

文章目录 1.冯诺依曼体系结构总线与数据传输通路为什么有内存这个部分计算机存储结构 2.操作系统(Operator System)2.1 概念2.2 设计OS的目的2.3 理解“管理”先描述再组织 2.4 用户使用系统调用和库函数(lib)概念 总结 3.初识进程3.1 基本事实与引入3.2…

JavaFX创建桌面应用exe文件以及SceneBuilder使用讲解

文章目录 1 JavaFX1.1 引言1.2 简单使用1.2.1 搭建项目1.2.2 fxml文件1.2.3 生成exe文件 1.3 Idea中集成SceneBuilder1.4 注解讲解1.4.1 FXMLController1.4.2 FXML1.4.3 FXMLLoaderParameters1.4.4 FXMLProperty 1.5 SceneBuilder1.5.1 添加组件ControlsFX1.5.1.1页面展示 1.5.…

Vue入门篇:样式冲突scoped,data函数,组件通信,prop data单向数据流,打包发布

这里写目录标题 1.组件的样式冲突scoped2.data函数3.组件通信1.两种组件关系分类和对应的组件通信方案2.父子通信方案的核心流程 4.prop & data、单向数据流5.打包发布6.打包优化:路由懒加载 1.组件的样式冲突scoped 默认情况:写在组件中的样式会全局生效→因此很容易造成多…

PyCharm更换pip源、模块安装、PyCharm依赖包导入导出

一、Pycharm更换安装源 在下载安装好Pycharm后,一个在实际编程开发过程中非常重要的问题是第三方库添加,然而Python默认的源网络速度有点慢,因此,我们常常需要做的是更换Pycharm的安装源。 在当前最新版(2022.03版&…

Blender常见操作

1.局部视图:Local View,也可称作Solo模式,按快捷键 “/”进入,在按退出,只显示选中的物体(可多选),方便编辑 2.物体合并:Ctrl J 其中,当选中多个物体时&am…

XTuner微调LLM:1.8B、多模态和Agent-笔记四

本次课程由XTuner 贡献者李剑锋、汪周谦、王群老师讲解【XTuner 微调 LLM:1.8B、多模态和 Agent】课程 课程视频:http:// https://b23.tv/QUhT6ni 课程文档:https://github.com/InternLM/Tutorial/blob/camp2/xtuner/readme.md 两种Finetun…

border-image-slice详细说明

上一篇文章我们介绍了 border-image的用法,其中border-image-source、border-image-width、 border-image-outset都比较简单好理解,这边文章我们重点学一下border-image-slice 属性,它用于定义边框图像如何被切割并应用到元素的边框上。这个属…

JavaScript 动态网页实例 —— 数值处理对象

前言 Math对象用于进行数学运算。其属性是数学中一些常见的常数值,在程序中可以直接使用。Math对象的方法很多,主要完成一些常见的数学运算,如三角函数计算、乘方、开方、求对数等。在 Math 对象的方法中,除了random()之外的所有方法都需要一个或几个参数,并且其用法基本…

【数据结构】为了节省空间,对于特殊矩阵我们可以这样做……

特殊矩阵的压缩存储 导读一、数组与矩阵1.1 数组1.2 数组与线性表1.3 数组的存储结构1.4 矩阵在数组中的存储1.4.1 行优先存储1.4.2 列优先存储 二、特殊矩阵及其压缩存储三、对称矩阵及其存储3.1 方阵与对称矩阵3.2 对称矩阵的存储3.3 压缩存储的手动实现3.3.1 行优先存储3.3.…

修改Ubuntu远程登录欢迎提示信息

无论何时登录公司的某些生产系统,你都会看到一些登录消息、警告或关于你已登录服务器的信息,如下所示。 修改方式 1.打开ubuntu终端,进入到/etc/update-motd.d目录下面 可以发现目录中的文件都是shell脚本, 用户登录时服务器会自动加载这个目录中的文件…

大白话理解IoC和DI

引言 Spring是Java领域最受欢迎的开发框架之一,其核心功能之一就是Spring容器,也就是IoC容器。这篇文章,我们就来聊聊Spring的两大核心功能,控制反转(IOC)和依赖注入(DI)。 文章思…

Go 语言基础(二)【数组、切片、指针、map、struct】

1、数组 特别需要注意的是:在 Go 语言中,数组长度也是数组类型的一部分!所以尽管元素类型相同但是长度不同的两个数组,它们的类型并不相同。 1.1、数组的初始化 1.1.1、通过初始化列表{}来设置值 var arr [3]int // int类型的数…

09_Scala函数和对象

文章目录 函数和对象1.函数也是对象 scala中声明了一个函数 等价于声明一个函数对象2.将函数当作对象来用,也就是访问函数,但是不执行函数结果3.对象拥有数据类型(函数类型),对象可以进行赋值操作4.函数对象类型的省略写法,也就是…

SCI一区 | MFO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测(Matlab)

SCI一区 | MFO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测(Matlab) 目录 SCI一区 | MFO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测(Matlab)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现MFO-CNN…