AI + 药物 夏令营(小白友好, 持续更新ing~)
Task 01 :
DataWhale夏令营Task 1主要进行了赛题介绍,以及比赛评分机制的介绍,这里关于生物基础知识部分就不再赘述,主要聊一聊比赛评分机制
1.1
# score = 50% × (1−MAE/100) + 50% × F1 × (1−Range-MAE/100) def calculate_metrics(y_true, y_pred, threshold=30): mae = np.mean(np.abs(y_true - y_pred)) y_true_binary = (y_true < threshold).astype(int) y_pred_binary = (y_pred < threshold).astype(int) mask = (y_pred >= 0) & (y_pred <= threshold) range_mae = mean_absolute_error(y_true[mask], y_pred[mask]) if mask.sum() > 0 else 100 precision = precision_score(y_true_binary, y_pred_binary, average='binary') recall = recall_score(y_true_binary, y_pred_binary, average='binary') f1 = 2 * precision * recall / (precision + recall) score = (1 - mae / 100) * 0.5 + (1 - range_mae / 100) * f1 * 0.5 return score
注:这里的np代表numpy
通过Task 03中的代码优化过程可以更好的了解到,训练模型时是否参考比赛评分机制,对于评分来说还是挺重要的
Task 02 :
DataWhale夏令营Task 02中主要是介绍了官方Baseline、RNN模型、数据的特征工程以及最后给出了基于lightgbm的Baseline代码
2.1 官方Baseline
我认为这里比较重要的就是明确官方用的两个特征
- 长期依赖问题:RNN 难以记住和利用很久以前的信息。这是因为在长序列中,随着时间步的增加,早期的信息会逐渐被后来的信息覆盖或淡化。
- 梯度消失和爆炸问题:在反向传播过程中,RNN 的梯度可能会变得非常小(梯度消失)或非常大(梯度爆炸),这会导致训练过程变得困难。(可能有同学不明白什么是梯度消失和梯度爆炸,这部分要解释的话跟learning rate有一定的关联,需要机器学习的知识基础,如果想深入学习,我觉得b站李宏毅老师讲的还是很好的,有时间可以学习学习)
这一局限性可以通过LSTM来改进(GRU是简化版)
2.3 数据的特征工程
这一部分一定是我成功上分的一大关键所在,但可惜的是虽然我成功利用学习手册跑通了代码,但是个人还没有特别能理解在讲什么,打算等机器学习基础再学习学习之后,再回来完善这篇博客。
Task 03 :
DataWhale夏令营Task 03主要是在讲如何对Task02得到的基于lightgbm的Baseline进行优化,我上分成功也是在Task03成功达到了0.7111的分数,之后肯定会再去优化,Task02我跑完之后,分数不仅没上升,反而还下降到了0.4多,应该是跟我实际上并没有很看懂特征工程那部分在跟什么有关系。
好了,言归正传,Task03主要介绍了lgm上分实现的各种思路,我主要就我自己目前为止如何上分来介绍,之后如果有新的进展,我也会持续更新这篇博客。
3.1 lgm优化
我主要是从使用官方评价指标作为损失函数和多折交叉训练两个角度来优化的,这里官方并没有给出可以直接一键运行的代码,因此我个人在魔塔中参考着Baseline的做法,去优化的lgm,其实也很简单,只要搞懂了feats、n-origin是什么,以及如何从train()函数返回的gbms中找到best model,再把相应的python包导入就好了
之前我一直觉得代码很长,很麻烦,一直也没好好的去研究如何上分,今天安安静静的坐下来看了一会儿并成功上分,我的心情真的非常激动,也算是第一次感受到了完全靠自己独立上分成功的果实吧。本来也没打算刷排行榜的分数,现在倒是想试试能不能拿个奖学金了,祝我好运!!!

浙公网安备 33010602011771号