【A题解题思路 第二弹】2025创新杯(钉钉杯)数学建模A题解题思路+可运行代码参考(无偿分享)

注:该内容由“数模加油站”原创,无偿分享,可以领取参考但不要利用该内容倒卖,谢谢!

A 题 智慧工厂工业设备传感器数据分析

初赛任务A:机床设备故障预测回归分析问题 使用机器编号、机器类型、运行小时数、温度、振动、声音、油位、冷却液位、功耗、距 上次维护天数、维护历史次数、故障历史次数、人工智能监控、过去30天错误编码等特征,构 建回归模型,预测机床设备在7天内是否会发生故障。要求输出模型准确率、召回率、F1值,并 分析前5个最重要的特征。

初赛任务B:剩余使用寿命预测回归分析问题 在不使用目标标签(7天内故障预测)的情况下,基于剩余使用寿命(天)、运行小时数、 温度、振动、油位、冷却液位、维护历史次数、故障历史次数等特征,构建回归模型,预测机 床设备的剩余使用寿命(目标为连续值)。要求输出模型的均方误差(MSE)和决定系数(R²) 并分析特征重要性对剩余寿命的影响

对于这两个问题,首先需要做好数据的预处理和特征选择,确保输入数据质量高且对目标变量有较好的预测能力。在选择模型时,可以从简单的回归模型入手,逐步引入复杂模型(如随机森林、XGBoost、SVR等)。评估模型时,需要使用合适的回归指标,如准确率、召回率、F1值等来评估故障预测任务,而使用均方误差和R²来评估剩余使用寿命预测任务。

问题1

问题1思路框架:

 

数学模型构建:

 

1. 数据预处理

数据预处理是任何机器学习任务中的关键步骤,直接影响到模型的表现。

1.1 缺失值处理

数值型特征(如温度、功耗等)的缺失值可以用 均值填充中位数填充。选择均值填充是因为大部分特征应该围绕某个中心值分布,均值作为一个较好的估计。

对于 类别型特征(如机器类型),可以使用 众数填充,即填充该特征的最常见值。

1.2 异常值处理

Z-score 方法用于检测异常值。Z-score反映了一个数据点距离均值的标准差。如果Z-score大于3,通常认为该点是异常值。

                       Z=\frac{X-\mu }{\sigma }

其中,\mu 是均值,\sigma是标准差。

异常值可能会影响模型训练的稳定性,通常可以将异常值剔除或替换。

1.3 数据标准化

为了确保各个特征在相同的尺度上进行比较,通常需要对数值型特征进行标准化,特别是当使用距离度量或者对模型训练时间较为敏感的模型时。

标准化公式

{​{X}_{\text{standard }}}=\frac{X-\mu }{\sigma }

1.4 特征工程

  • 特征构造:可以结合现有特征构造新的特征。例如,可以计算 温度和振动的交互项,以反映设备状态变化的潜在关联。
  • 类别特征编码:如机器类型等可以通过 独热编码(One-Hot Encoding 转换为数值特征。

2. 特征选择

特征选择是减少模型复杂性、提高性能和避免过拟合的重要步骤。在此任务中,我们有多个传感器数据和设备历史记录特征,我们需要从中选择对预测故障最为相关的特征。

2.1 相关性分析

目标:初步筛选特征。通过计算各特征与目标变量(是否故障)的相关性,去除与目标变量相关性低的特征。

使用皮尔逊相关系数(Pearson correlation)来评估特征与目标之间的线性相关性。

{​{\rho }_{X,Y}}=\frac{\operatorname{cov}(X,Y)}{​{​{\sigma }_{X}}{​{\sigma }_{Y}}}

其中,\text{cov}(X,Y) 是特征 X 与目标 Y 的协方差,\sigma_X\sigma_Y是它们的标准差。

相关性分析帮助我们快速去除无关特征,避免后续算法在冗余特征上浪费计算资源。

2.2 递归特征消除(RFE

目标:在数据集较为复杂时,递归特征消除(RFE)可以进一步优化特征选择。

方法

    • RFE通过训练回归模型,并逐步去除不重要的特征,最终保留最具预测能力的特征。
    • 每次训练一个基学习器(例如线性回归),评估每个特征的重要性,然后递归地移除最不重要的特征,直到保留最重要的特征。
    • 适用场景:如果数据集特征之间存在复杂的非线性关系或交互作用,RFE能够帮助我们从中挖掘出最有用的特征。

2.3 基于树的模型(XGBoost

目标:使用树模型(如XGBoost或随机森林)对特征的重要性进行排序。这些模型在评估特征重要性时能够有效处理非线性关系。

方法

训练一个随机森林回归XGBoost回归模型,这些模型能够自动评估每个特征的贡献并计算特征重要性。

特征重要性通常基于信息增益或基尼指数(用于决策树的分裂标准)。

XGBoost的特征重要性评估:

\text{ Feature Importance }=\frac{\sum\limits_{i=1}^{n}{\text{ Gain of feature }}\text{i}}{n}

优点:随机森林和XGBoost能够处理非线性关系,适合复杂的设备故障预测问题,并且能够自动计算和筛选特征。

3. 构建XGBoost回归模型

在特征选择后,我们可以使用 XGBoost 来构建回归模型。XGBoost是一种基于梯度提升树的集成学习算法,适用于复杂的非线性数据。

3.1 初始化XGBoost模型

选择XGBoost作为回归模型,因为它能够处理复杂的特征交互,适合本任务中的设备故障预测问题。XGBoost模型的常见参数包括:

n_estimators:树的数量。

max_depth:每棵树的最大深度。

learning_rate:学习率,用于控制每棵树的贡献。

切分数据集为训练集和测试集。

XGBoost回归公式

  • XGBoost通过加权的决策树集成来做回归,损失函数为:

L(\theta )=\sum\limits_{i=1}^{m}{\left[ \operatorname{loss}\left( {​{y}_{i}},{​{​{\hat{y}}}_{i}} \right)+\Omega (f) \right]}

其中,\text{loss}是回归损失函数,\Omega(f)是树的复杂度(例如树的叶子数、分裂点的数量),m是样本数,\hat{y}_i是预测值。

3.2 模型预测

模型训练完成后,我们可以使用测试集进行预测。

3.3 模型评估

使用 均方误差(MSE决定系数( 来评估回归模型的性能。

均方误差(MSE 衡量预测值与实际值之间的平均误差。

\text{MSE}=\frac{1}{m}\sum\limits_{i=1}^{m}{​{​{\left( {​{y}_{\text{true },i}}-{​{y}_{\text{pred},i}} \right)}^{2}}}

决定系数( 衡量模型对数据方差的解释能力。

{​{R}^{2}}=1-\frac{\sum\limits_{i=1}^{m}{​{​{\left( {​{y}_{\text{true },i}}-{​{y}_{\text{pred },i}} \right)}^{2}}}}{\sum\limits_{i=1}^{m}{​{​{\left( {​{y}_{\text{true },i}}-\bar{y} \right)}^{2}}}}

3.4 模型性能分析

均方误差(MSE)越小,表示模型的预测误差越小。

 Score接近1时,表示模型能够很好地拟合数据,解释能力强;接近0则表示模型表现不佳

Python代码: 

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer
from sklearn.metrics import mean_squared_error, r2_score
import xgboost as xgb
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression
from scipy.stats import zscore

# 数据加载
data = pd.read_csv('train_data.csv')  # 用实际数据路径

# 提取特征和目标变量
X = data.drop(columns=['Failure_Within_7_Days'])  # 特征
y = data['Failure_Within_7_Days']  # 目标变量

# 处理缺失值
imputer = SimpleImputer(strategy='mean')
X_imputed = imputer.fit_transform(X)

# 特征标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_imputed)

# 检查异常值(使用Z-score方法)
Z = zscore(X_scaled)
X_no_outliers = X_scaled[(Z < 3).all(axis=1)]  # 删除异常值
y_no_outliers = y[(Z < 3).all(axis=1)]  # 删除对应的y

# 切分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_no_outliers, y_no_outliers, test_size=0.2, random_state=42)

# 相关性分析
correlation_matrix = pd.DataFrame(X_scaled).corr()
plt.figure(figsize=(12, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.show()

# 递归特征消除(RFE)
model = LinearRegression()
selector = RFE(model, n_features_to_select=5)
X_rfe = selector.fit_transform(X_train, y_train)

# 输出选择的特征
print("Selected features from RFE:", X_train.columns[selector.support_])

# 基于XGBoost的特征选择
xgb_model = xgb.XGBRegressor(objective='reg:squarederror', n_estimators=100, max_depth=6, learning_rate=0.1)
xgb_model.fit(X_train, y_train)

# 获取特征重要性
importance = xgb_model.feature_importances_

# 可视化特征重要性
sns.barplot(x=importance, y=X.columns)
plt.title("Feature Importance from XGBoost")
plt.show()

# 使用XGBoost进行训练和预测
xgb_model.fit(X_train, y_train)
y_pred = xgb_model.predict(X_test)

# 模型评估
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f"Mean Squared Error: {mse}")
print(f"R² Score: {r2}")

 

后续都在“数模加油站”...... 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值