Kaggle系列-Mechanisms of Action (MoA) Prediction[表格数据多标签]第一名方案

简介: Kaggle系列-Mechanisms of Action (MoA) Prediction[表格数据多标签]第一名方案

27.png


比赛链接:https://www.kaggle.com/c/lish-moa/overview


赛题背景


连接图是麻省理工学院和哈佛大学广泛研究所、哈佛大学创新科学实验室(LISH)和美国国立卫生研究院共同基金综合网络细胞特征库(LINCS)的一个项目,它提出了这一挑战,目标是通过改进MoA预测算法来推进药物开发。


网络异常,图片无法展示
|


药物的作用机制是什么?为什么它很重要?

过去,科学家是从天然产物中提取药物或受到传统疗法的启发。在人们认识到驱动其药理活性的生物学机制之前,非常常见的药物,例如扑热息痛(在美国称为对乙酰氨基酚)已投入临床使用数十年。


如今,随着功能更强大的技术的出现,药物发现已经从过去的偶然方法变成了基于对疾病潜在生物学机制的了解而更具针对性的模型。在这个新的框架中,科学家寻求鉴定与疾病相关的蛋白质靶标,并开发出可以调节该蛋白质靶标的分子。作为描述给定分子生物学活性的简写,科学家们将其标记为作用机理或简称MoA。


赛题任务


如何确定新药的MoAs?


29.png


基于MoA批注,将根据应用于每个药物MoA批注对的对数损失函数的平均值来评估溶液的准确性。如果成功,你可以开发一种算法,从而根据化合物的细胞特征预测化合物的MoA,从而帮助科学家推进药物发现过程。

在这场比赛中,你将获得一个独特的数据集,结合基因表达和细胞活力的数据。这项数据是基于一项新技术,在100种不同细胞类型的细胞池中同时(在相同的样本中)测量人类细胞对药物的反应(从而解决了事先确定哪些细胞类型更适合某一特定药物的问题)。此外,您还可以访问此数据集中5000多种药物的MoA注释。

按照惯例,数据集被分为测试和训练子集。因此,您的任务是使用训练数据集来开发一个算法,该算法自动将测试集中的每个案例标记为一个或多个MoA类。注意,由于药物可以有多个MoA注释,因此这项任务在形式上是一个多标签分类问题。

如何评估解决方案的准确性?


基于MoA注释,将根据应用于每个药物MoA注释对的对数损失函数的平均值来评估溶液的准确性。


如果成功,你将帮助开发一种算法,根据化合物的细胞特征预测其MoA,从而帮助科学家推进药物发现过程。


赛题数据


在这个比赛中,你将预测不同样本(sig_id)的作用机制(MoA)反应的多个靶标概率,给出各种输入,如基因表达数据和细胞活力数据。

  • train_features.csv:训练集对应的特征数据。特征g-表示基因表达数据,c-表示细胞活力数据。cp_type表示使用化合物(cp_vehicle)或控制扰动(ctrl_vehicle)处理的样品;控制扰动无moa;cp_time和cp_dose表示治疗时间(24、48、72小时)和剂量(高、低)。
  • train_drug.csv 训练集样本的sig_id和drug_id对应关系
  • train_targets_scored.csv:MOA的二分类标签数据
  • train_targets_nonscored.csv:额外没有带有标签的MOA数据
  • test_features.csv:测试数据的特征。需要选手预测测试数据中每一行的每个MoA得分的概率。
  • sample_submission.csv:提交文件

    30.png


数据分析



https://www.kaggle.com/isaienkov/mechanisms-of-action-moa-prediction-eda


特征数据


训练集和测试集中的特征个数为876个


31.png

Number of rows in training set: 23814
Number of columns in training set: 876
Number of rows in test set: 3982
Number of columns in test set: 876


类别特征可视化

  • cp_type化合物处理方式

    32.png


  • cp_time 实验时间

    33.png


  • cp_dose 试验剂量

    33.png

ds = df[df['dataset']=='train']
ds = ds.groupby(['cp_type', 'cp_time', 'cp_dose'])['sig_id'].count().reset_index()
ds.columns = [
    'cp_type', 
    'cp_time', 
    'cp_dose', 
    'count'
]
fig = px.sunburst(
    ds, 
    path=[
        'cp_type',
        'cp_time',
        'cp_dose' 
    ], 
    values='count', 
    title='Sunburst chart for all cp_type/cp_time/cp_dose',
    width=500,
    height=500
)
fig.show()


34.png


基因细胞特征分布


g代表gene特征数据,c代表cell特征数据

train_columns = train.columns.to_list()
g_list = [i for i in train_columns if i.startswith('g-')]
c_list = [i for i in train_columns if i.startswith('c-')]

def plot_set_histograms(plot_list, title):
    fig = make_subplots(
        rows=4, 
        cols=3
    )
    traces = [
        go.Histogram(
            x=train[col], 
            nbinsx=100, 
            name=col
        ) for col in plot_list
    ]
    for i in range(len(traces)):
        fig.append_trace(
            traces[i], 
            (i // 3) + 1, 
            (i % 3) + 1
        )
    fig.update_layout(
        title_text=title,
        height=1000,
        width=WIDTH
    )
    fig.show()
plot_list = [
    g_list[
        np.random.randint(0, len(g_list)-1)
    ] for i in range(50)
]
plot_list = list(set(plot_list))[:12]
plot_set_histograms(plot_list, 'Randomly selected gene expression features distributions')


35.png


特征相关性

columns = g_list + c_list
for_correlation = random.sample(columns, 50)
data = df[for_correlation]
f = plt.figure(
    figsize=(18, 18)
)
plt.matshow(
    data.corr(), 
    fignum=f.number
)
plt.xticks(
    range(data.shape[1]), 
    data.columns, 
    fontsize=14, 
    rotation=50
)
plt.yticks(
    range(data.shape[1]), 
    data.columns, 
    fontsize=14
)
cb = plt.colorbar()
cb.ax.tick_params(
    labelsize=13
)


36.png


目标分析


纵向为特征列,横向为目标列(206个),每个单元为对应特征与目标的相关性系数

correlation_matrix['train_features'] = columns
correlation_matrix = correlation_matrix.set_index('train_features')
correlation_matrix


37.png


与目标列相关性比较高的特征如下:

count_features = total_scores['train_best_column'].value_counts().reset_index().sort_values('train_best_column')
count_features.columns = [
    'column', 
    'count'
]
count_features = count_features.tail(33)
fig = px.bar(
    count_features, 
    x='count', 
    y="column", 
    orientation='h', 
    title='Columns from training set with number of high correlations with target columns', 
    width=WIDTH,
    height=700
)
fig.show()


38.png


另外也有高阶的相关系系数分析

  • 二阶相关性

    39.png


  • 三阶相关性

    40.png


Hungry for Gold 第一名方案



分享链接:https://www.kaggle.com/c/lish-moa/discussion/201510

代码链接:https://www.kaggle.com/markpeng/final-best-lb-cleaned/notebook


模型1 3-Stage NN


半监督学习:该模型为三阶段的NN网络组成,首先是特征工程,主要包括基因特征数据,细胞特征数据以及实验分类特征,然后进行分位数变化以及归一化,之后输入到StageNN1 然后预测得到没有标签数据的预测,之后合并标注数据进行StageNN2训练预测得到第二次没有标签的预测输出,之后合并带有标签的数据得到最后测试集的预测。

41.png


42.png


模型2 2-Stage NN+TabNet


这里主要用到了Tabnet工具,可以利用神经网络在表格数据上进行大放异彩。使用方法大家可以参照Github链接:


dreamquark-ai/tabnet https://github.com/dreamquark-ai/tabnet

44.png


45.png



其中2-FC代表简单的两层全连接神经网络,如下图所示


46.png


模型3 Simple NN


这里和模型1比较相似,但是进行的监督学习,没有用到半监督学习。同时这里加入了基于K-Means聚类的特征


47.png


48.png


模型4 2-heads ResNet:基于多输入的残差网络


原始开源开源代码:https://www.kaggle.com/demetrypascal/fork-of-2heads-looper-super-puper-plate


49.png


残差网络拓扑图,其中网络用到也是最基本的Dense网络结构:


50.png


模型5 DeepInsight CNNs


利用 EfficientNet B3 提取特征


51.png


利用ResNeSt提取特征


52.png


特征多样性


为了更好地理解模型的多样性,下面是最好的单一模型的平均相关性热图。对每对模型采用Pearson方法计算相关系数。我们以目标相关系数的均值作为每个模型的最终值。

  • 基于线上提交得出的模型相关性热力图

    53.png


  • 基于线下OOF得出的模型相关性热力图

    54.png

    可以看到模型相关性系数都很低,一般在0.52-0.70,模型具有多样性和差异性,那么融合之后的收益会很大


总结


  • 本方案使用神经网络在白表格数据上做了大量尝试,并取得很大的成效
  • 为了提高模型融合的收益,需要保证模型多样性,所以作者也使用了不同的训练方法和模型结构
  • 使用CNN等预训练模型提取特征图
相关文章
|
6月前
|
数据可视化
如何用潜类别混合效应模型(Latent Class Mixed Model ,LCMM)分析老年痴呆年龄数据
如何用潜类别混合效应模型(Latent Class Mixed Model ,LCMM)分析老年痴呆年龄数据
|
5月前
|
机器学习/深度学习 人工智能 监控
人工智能平台PAI产品使用合集之设置了7个特征,但在最后生成的数据表中只包含了6个id_feature的特征,是什么导致的
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
6月前
|
数据可视化
R语言用潜类别混合效应模型(Latent Class Mixed Model ,LCMM)分析老年痴呆年龄数据
R语言用潜类别混合效应模型(Latent Class Mixed Model ,LCMM)分析老年痴呆年龄数据
107 10
|
6月前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能平台PAI产品使用合集之在使用DSSM负采样时,不知道label_fields的配置方法如何解决
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
6月前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI产品使用合集之如何配置DSSM模型负采样item表的schema
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
6月前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI产品使用合集之负采样版本DSSM双塔模型训练好之后,怎么分别获取user tower的embedding和item tower的embedding
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
机器学习/深度学习 人工智能 自然语言处理
7 Papers & Radios | 联邦图机器学习综述;基于知识图谱和分子图的药物筛选模型(1)
7 Papers & Radios | 联邦图机器学习综述;基于知识图谱和分子图的药物筛选模型
188 0
|
机器学习/深度学习 人工智能 自然语言处理
7 Papers & Radios | 联邦图机器学习综述;基于知识图谱和分子图的药物筛选模型(2)
7 Papers & Radios | 联邦图机器学习综述;基于知识图谱和分子图的药物筛选模型
148 0
|
机器学习/深度学习 Python
PU Learning简介:对无标签数据进行半监督分类
PU Learning简介:对无标签数据进行半监督分类
422 0
PU Learning简介:对无标签数据进行半监督分类
|
数据采集 自然语言处理 数据建模
《30天吃掉那只 TensorFlow2.0》 1-3 文本数据建模流程范例 (imdb电影评论分类问题)
《30天吃掉那只 TensorFlow2.0》 1-3 文本数据建模流程范例 (imdb电影评论分类问题)
《30天吃掉那只 TensorFlow2.0》 1-3 文本数据建模流程范例 (imdb电影评论分类问题)