数学建模竞赛实战:数据分析与机器学习算法应用

一、 竞赛背景与问题抽象

数学建模竞赛(如 C2025 赛事等)要求参赛者在限定时间内,针对复杂的现实业务场景,建立合理的数学模型并进行编程求解。与标准化的算法题不同,数模竞赛提供的数据往往是海量、非结构化且充满噪声的。

在近期的几次竞赛中,我的主要职责是负责数据处理与核心算法的编程实现。本代码库(包含 c1, c2, c3, c4 等目录)完整记录了我们在解决各类数据挖掘与预测优化问题时的代码演进过程。本文将从数据清洗、模型构建到结果可视化三个阶段,总结我们在竞赛中的技术实践。


二、 数据预处理与特征工程

“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限。”在竞赛中,超过一半的时间被用于处理原始的 Excel 或 CSV 数据(如项目中的 mandata.xlsx)。我主要使用了 Python 的 pandasnumpy 库来完成这些工作。

2.1 缺失值与异常值处理

原始数据中不可避免地存在空白字段或逻辑错误的异常值。

  • 缺失值填补:对于数值型特征,通常使用均值或中位数进行填充;对于分类特征,则使用众数填充。在某些对数据分布要求严格的场景下,我使用了基于随机森林(Random Forest Regressor)的插补算法来预测并填补缺失值。
  • 异常值检测:利用 $3\sigma$ 原则(针对正态分布数据)或箱线图(Boxplot)四分位距(IQR)方法,识别出极端的离群点,并根据业务逻辑决定是将其剔除还是进行平滑处理。

2.2 特征转换与归一化

为了使不同量纲的数据能够在同一个模型中进行公平的权重计算,特征转换是必不可少的。

  • 连续变量:使用 StandardScaler(标准化)将数据转换为均值为 0,方差为 1 的标准正态分布;或使用 MinMaxScaler 将数据缩放到 [0, 1] 区间。
  • 分类变量:对于无序的离散型特征(如“性别”、“血型”),使用了 One-Hot 编码(独热编码)将其转换为多个二值特征列,避免算法错误地将类别编号作为数值大小进行计算。

三、 机器学习算法选型与落地

在完成数据清洗后,需要根据具体的赛题要求选择合适的机器学习算法。在项目中,我主要利用 scikit-learn 库实现了以下几类模型。

3.1 监督学习:决策树与分类预测

在某次针对人群健康风险(如 BMI 分组)的分类任务中,我选择了决策树(Decision Tree)分类器。

  • 模型优势:决策树最大的优势在于其极强的可解释性。它可以输出清晰的分类规则(如“若 年龄 > 50 且 血糖 > X,则判定为高危”),这对于撰写数模论文非常有利。
  • 防止过拟合:为了防止模型在训练集上过拟合,我通过交叉验证(Cross-Validation)调整了 max_depth(最大树深)和 min_samples_leaf(叶子节点最小样本数)等超参数。
  • 规则导出:利用 Graphviz 库,我将训练好的模型导出为可视化的树状图(BMI分组决策树.png),直观地展示了各特征的分裂阈值。

3.2 无监督学习:K-Means 聚类分析

在面对没有明确分类标签的数据集时,我们需要进行聚类分析。

  • 算法实现:我编写了基于 K-Means 算法的聚类脚本,用于将样本自动划分为不同的特征群体(如 km_bmi_groups.png 所示)。
  • K 值选择:K 值的选择是聚类的难点。我通过编写循环,计算不同 K 值下的“轮廓系数(Silhouette Coefficient)”和“误差平方和(SSE,手肘法)”,以数学指标为依据确定了最优的聚类簇数。

3.3 多目标优化:帕累托前沿分析

在某些工业参数优化问题中,存在多个相互冲突的目标(例如:既要降低能耗,又要提高产量)。
在这种多目标规划场景下,不存在绝对的唯一最优解。我编写了相关的遗传算法(如 NSGA-II)脚本,求解并绘制了帕累托前沿图(Pareto Front)。这为决策者提供了一系列非劣解(Non-dominated Solutions)的折中方案。


四、 结果可视化与论文支撑

高质量的图表是数模论文的加分项。在项目中,我大量使用了 matplotlibseaborn 库。

  • 探索性数据分析 (EDA):在建模初期,通过绘制散点图矩阵(Pairplot)、特征相关性热力图(Heatmap)以及直方图,帮助团队快速识别出与目标变量强相关的核心特征。
  • 自动化报告输出:为了提高团队协作效率,我编写了 I/O 脚本,将多元回归模型的各项统计学指标(如 $R^2$ 值、F 检验统计量、各特征的 P 值)自动格式化并导出为 回归模型摘要.txt,供论文写手直接引用。

五、 总结

通过多次数学建模竞赛的磨砺,我的 Python 数据处理和算法实现能力得到了显著提升。更重要的是,我掌握了将现实中模糊的业务需求转化为严谨的数学模型,并利用代码进行求解的完整工程方法论。这些从海量数据中提取有价值信息的经验,为我后续深入学习数据科学和人工智能打下了坚实的基础。