文章目录
- 一、前言
- 二、主要内容
- 三、总结
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/
一、前言
不以物喜,不以己悲。见众生,见自己。
作为荣获一等奖的学生代表,我有幸参加了 “华为杯” 第二十届中国研究生数学建模竞赛颁奖典礼暨二十周年庆祝大会。此次盛会于 2023 年 12 月 15 日至 17 日在南京东南大学隆重举行,对我而言,这是一次极具意义的参会经历。
通过本篇博客,我愿意与读者分享我在整个活动中所获得的独特体验和深刻感受,并将其作为一个珍贵的记念。
东南大学校训:止于至善
华为的愿景与使命是把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界。
二、主要内容
缘起:
- 叮咚!一封来自数模二十周年颁奖盛典的邀请函:https://mp.weixin.qq.com/s/tfE1xSebo9xciFtJDSblqg
- 重磅预告 | 第二十届中国研究生数学建模竞赛 “数模之星” 决赛答辩会即将来袭:https://mp.weixin.qq.com/s/V1QVa3Mj-tUWjLBIhczCCA
2023 年 12 月 15 日乘坐飞机抵达南京禄口机场,然后前往分配到的酒店报道以及领取相关物资。
2023 年 12 月 16 日,数模之星答辩。北京理工大学的一个团队非常厉害(京工数学建模队,做的是华为题),最后拿到了数模之星冠军。
👏👏 京工数学建模团队实至名归,遥遥领先!(微信视频号可以搜到有人现场录制的答辩视频)
值得一提的是,E 题的一个数模之星貌似不会算二分类任务的 F1 score! 😅😅
尊敬的读者,您可能会对此感到一丝娱乐之情:将这样的研究结果展示于答辩的 PPT 中,实在是一种大胆之举。然而,似乎并没有多少人对此表示关注。针对 E 题的提问仅有一位女性专家进行了探讨,她很可能就是出题的专家。感觉她主要关注的是预测模型在临床应用中的价值。遗憾的是,两支答辩团队在回答时似乎都未能深入分析预测模型的可解释性以及关键预测指标在临床上的重要性。个人感觉,其中一个团队显得过度包装。
如上图 PPT 所示,令人惊讶的是,该机器学习预测模型的 F1 分数竟然达到了 1! 在这种情况下,我们有必要仔细审查数据集的划分方法以及是否存在过拟合现象。显然,报告中并未提供关于均值、方差和混淆矩阵的详细分析。很可能是因为没有采用分层 K 折交叉验证方法,导致预测性能评估结果的可靠性大打折扣,尤其在标签类别不平衡的情况下。
此外,在认真审查计算结果后,作为一名具有丰富机器学习和数据科学经验的技术博主,我发现这些结果有点诡异。Precision 和 Recall 的值均未达到 1,那么如何得出 F1 分数为 1 的结论呢? 这一点值得我们深入探讨和质疑。
家人们谁懂啊,听数模之星答辩还有 Debug 代码的机会。接下来我们可以根据 PPT 给出的混淆矩阵来计算验证!Python 代码如下:
import numpy as np
from prettytable import PrettyTableclass ConfusionMatrix(object):def __init__(self, num_classes: int, labels: list):self.matrix = np.array([[2, 1],[2, 15]])self.num_classes = num_classesself.labels = labelsdef summary(self):sum_TP = 0print(self.matrix)for i in range(self.num_classes):sum_TP += self.matrix[i, i]acc = sum_TP / np.sum(self.matrix)print("模型预测精度为:", acc)table = PrettyTable()table.field_names = ["", "Precision", "Recall", "F1-score"]for i in range(self.num_classes):TP = self.matrix[i, i]FP = np.sum(self.matrix[i, :]) - TPFN = np.sum(self.matrix[:, i]) - TPTN = np.sum(self.matrix) - TP - FP - FN# Accuracy = (TP + TN) / (TP + FP + TN + FN)Precision = round(TP / (TP + FP), 3) if TP + FP != 0 else 0.Recall = round(TP / (TP + FN), 3) if TP + FN != 0 else 0.F1_score = round(2 * Precision * Recall / (Recall + Precision),3) if Recall + Precision != 0 else 0.table.add_row([self.labels[i], Precision, Recall, F1_score])print(table)if __name__ == '__main__':labels = ["1", "0"]# num_classes为分类的类别confusion = ConfusionMatrix(num_classes=2, labels=labels)confusion.summary()
结果应为:
[[ 2 1][ 2 15]]
模型预测精度为: 0.85
+---+-----------+--------+----------+
| | Precision | Recall | F1-score |
+---+-----------+--------+----------+
| 1 | 0.667 | 0.5 | 0.572 |
| 0 | 0.882 | 0.938 | 0.909 |
+---+-----------+--------+----------+[[ 2 2][ 2 14]]
模型预测精度为: 0.8
+---+-----------+--------+----------+
| | Precision | Recall | F1-score |
+---+-----------+--------+----------+
| 1 | 0.5 | 0.5 | 0.5 |
| 0 | 0.875 | 0.875 | 0.875 |
+---+-----------+--------+----------+[[ 2 1][ 1 16]]
模型预测精度为: 0.9
+---+-----------+--------+----------+
| | Precision | Recall | F1-score |
+---+-----------+--------+----------+
| 1 | 0.667 | 0.667 | 0.667 |
| 0 | 0.941 | 0.941 | 0.941 |
+---+-----------+--------+----------+
分析原因:
- 他们在计算精确度(Precision)和召回率(Recall)时仅关注了负类样本(即没有血肿扩展的样本)。然而,在血肿扩展风险预测中,其实更应该重点关注正类样本或者都要考虑。
- 支持向量机(SVM)和逻辑回归模型的 F1 分数计算错误。理论上,F1 分数不可能达到 1,这一点显而易见。然而,这个队直接展示 F1 分数为 1 的结果。
总结来看,计算结果显然存在一定的问题,这可能导致了学术不规范和预测建模作弊。建议仔细阅读周志华教授所著的《机器学习》(俗称西瓜书),以便更好地理解如何规范地进行机器学习模型的训练和验证。遵循正确的流程构建机器学习预测模型至关重要,而非仅凭一个初步结果就过分强调其意义 / {/} /价值。
在华为之夜活动中,世纪缘酒店成为了盛大庆典的举办场所。晚宴上,美食佳肴与抽奖环节相得益彰,使宾主共享欢愉时光。活动结束后,与新结识的小伙伴们沿着九龙湖畔漫步,共同回到酒店,这无疑是一段难忘的经历。
华为的遥遥领先(HUAWEI Mate 60 Pro),虽然没有抽到,沾沾喜气.jpg:
2023 年 12 月 17 日,数学建模颁奖盛典隆重举行。有数模嘉年华以及华为展示成果的小帐篷。主办方制作的微电影 《建数少年》 表现出色,引发了广大数学建模参赛人员的共鸣与认同。此外,在本届数模盛事中,主办方邀请到了著名数学大师——丘成桐院士发表了精彩致辞。本次活动的其他环节与往届大致相似,旨在展示竞赛成果。值得一提的是,明年的数学建模竞赛将由山东大学承办。
在本年度的颁奖典礼上,颁发的是纸质证书以及有证书壳,两名队友同样也有仅自己名字的纸质证书及证书壳。领取完毕后,活动基本告一段落,接下来便是花光赠送的消费券以及去合适的游玩地点再放松一下。最终,我们整理好所需物品,回到学校投入研究和学习工作中,为未来的事业继续努力。与诸君共勉!🚀🚀
三、总结
这篇博客与读者分享我参加了 “华为杯” 第二十届中国研究生数学建模竞赛颁奖典礼暨二十周年庆祝大会所获得的独特体验和深刻感受,并将其作为一个珍贵的记念。这大抵也是学生时代最后一个数学建模竞赛了。
世界灿烂盛大。人生有梦,各自精彩。
祝福看到这篇博客的小伙伴在以后的 “华为杯” 数模竞赛中都能拿到数模之星。⭐⭐
📚️ 参考链接:
- 中国研究生数学建模竞赛
- 沈向洋院士:致 AI 时代的我们 —— 请不要忽视写作的魅力