AI + 药物 夏令营(小白友好, 持续更新ing~)

Task 01 : 

DataWhale夏令营Task 1主要进行了赛题介绍,以及比赛评分机制的介绍,这里关于生物基础知识部分就不再赘述,主要聊一聊比赛评分机制

 

1.1 

在这次比赛中,模型的评分由多个指标共同决定,以全面评估模型的性能。这些指标包括平均绝对误差(MAE)、区间内的平均绝对误差(Range MAE和和F1得分(F1 Score)。这些指标分别衡量模型在预测上的准确性和稳定性,以及在区间内的表现。最终的评分(Score)是综合这些指标的加权结果。通过下述代码,我们可以更加了解本次赛题的评分细节。

 

# 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

我认为这里比较重要的就是明确官方用的两个特征 

siRNA_antisense_seq和modified_siRNA_antisense_seq_list,之后我们通过该序列构造词汇表,并将该词汇表输入RNN模型中。那么什么是RNN模型呢?
 
2.2 RNN模型
 
RNN,全称为递归神经网络(Recurrent Neural Network),是一种人工智能模型,特别擅长处理序列数据。它和普通的神经网络不同,因为它能够记住以前的数据,并利用这些记忆来处理当前的数据。想象你在读一本书。你在阅读每一页时,不仅仅是单独理解这一页的内容,还会记住前面的情节和信息。这些记忆帮助你理解当前的情节并预测接下来的发展。这就是 RNN 的工作方式。假设你要预测一个句子中下一个单词是什么。例如,句子是:“我今天早上吃了一个”。RNN 会根据之前看到的单词(“我今天早上吃了一个”),预测下一个可能是“苹果”或“香蕉”等。它记住了之前的单词,并利用这些信息来做出预测。
 
关于这个模型,DataWhale其实在hugging-llm中有做过详细的解释,我之前也因为了解过相关知识,所以在这块儿理解起来还是比较简单的。
 
新学习到的一个问题就是RNN实际上是有局限性的:
  • 长期依赖问题: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包导入就好了

 

之前我一直觉得代码很长,很麻烦,一直也没好好的去研究如何上分,今天安安静静的坐下来看了一会儿并成功上分,我的心情真的非常激动,也算是第一次感受到了完全靠自己独立上分成功的果实吧。本来也没打算刷排行榜的分数,现在倒是想试试能不能拿个奖学金了,祝我好运!!!

 

posted @ 2024-08-01 20:28  ITcoder555  阅读(9)  评论(0)    收藏  举报