今天下午在实验室摸鱼的时候,听到隔壁组说华为杯出结果了,心下一惊,去官网查了一下结果,出乎意料地竟然拿了国一(还有一个小插曲,在excel表里搜我名字的时候搜到了国三,结果发现是同名同姓的一位老哥)。简单记录一下数模的经历,给之后像我一样第一次参加的同学一些经验。

赛前

第一次参加数模类的竞赛,赛前抱着学习和积累经验的想法报的名,也没做啥准备,找到了一个相关的b站视频,结果那段时间太忙了一集也没看,最后就截了一页各类问题适合的模型。剩下的倒是在知乎看了不少经验贴,不过感觉也没学到什么有用的东西。

总的来说,因为我在队里主要负责编程和模型部分,虽然真的打起比赛来完全没有按照分工进行,但是因为自己是计算机出身,又是学人工智能的,所以对于常见的机器学习的模型,都还算了解,再加上python各种库都有,所以其实真的做起来感觉编程的压力不算很大。

开赛

因为我是一个人住在宿舍,所以我的宿舍就成了我们打比赛的场地,赛前我专门买了一张小桌子,后来成了我们开会讨论和聚在一起吃外卖的餐桌,还有一个同学的办公桌。

第一天开赛的时候,我们很快就决定了做E题,一道医学的数据分析的题,倒不是因为其他什么原因,纯粹是我们一遍看下来只能看得懂这道题,果然这道题也是绝大多数人的选择。

其实刚开赛拿到题目,我就感觉这很像我本科做的一些机器学习的大作业,感觉这不就是一个泰坦尼克号生存概率的问题和洛杉矶房价预测的综合吗?不过是各种各样的参数多了一些,要好好地根据问题做一些特征工程,问题更加复杂一些,不能用简单的线性回归去拟合了,后面还得加一些和问题相关的聚类和分析。

我们开赛后就没有按照最先预计地分成编程、论文和模型三个人分别做,主要是这样大家没办法同步开展工作,而且大家都是电信、计算机专业,拿着也都能做,所以最后变成了一个人主要负责一个大题,各自开展工作。

赛中

我主要负责数据的处理和后续建模做二分类、多分类、概率预测,这些问题基本上都是机器学习入门的练习,只不过这道题有很多特殊性。

从数据处理上来说,数据量很小,而且样本的分布又特别不均匀,数据的特征特别多,这些特征之间又有很强的关联性,数据分布在多个表格中,不同表格中的数据还存在冲突矛盾。总之数据处理就是一件繁琐、重复又很关键的工作。其实我们最后也没有从理论山找到一个较好的选取特征的方法,但是数据中有很多肿瘤的形态学参数,肯定要做数据降维,最后我们用相关性分析做了一些简单的筛选,总体来看有一定的效果。

毕竟是建模大赛,模型的选取其实很重要,但是我们之前都没有数模的经验,而且平时都是做深度学习的,最这些机器学习的模型了解,但不多,而且题目里过小的数据量完全杜绝了上深度学习的可能性,所以最后我们选择了最简单但是很有效的方法,把常见的机器学习模型都拿来试一遍,做多折的交叉验证,什么模型的效果好,就拿什么模型做。

最后试了各种各样的模型,每个模型又试了好多参数,最终选出了几个效果还不错的模型,再做一点组合、投票决策之类的,就算完工。

其他队友还做了拟合、聚类的工作,不过因为我自己没做那一部分,就不详细展开了。

论文

其实感觉对于数模来讲,最重要的还是要论文写得好,起码图和表要做的丰富且好看。因为我们三个人都要写论文,所以overleaf整起来,语言上尽量学术,结构上有一条主线贯穿每一个章节,每个小章节内用一个流程图讲清楚做了什么工作,是怎么做的。

其实我们倒也没有刻意地堆字数,写着写着就写了五十多页,不过我个人还是觉得清晰的结构,章节内明确的流程,精美的图标才是关键。

小结

其实总体来说,我们组因为三个人都还挺负责的,大家都从头做到尾坚持了下来,中间除了有一天三个人都有必须去上的课没工作,最后一天熬到了早上六点通宵赶了论文外,都是正常的工作时间,一个情绪稳定、踏实干活的队内氛围还是很重要的。

最后感谢一下我的两位队友,很开心的一次经历。