517. Open Problems - Multimodal Single-Cell Integration | open-problems-multimodal
感谢所有的Kagglers和竞赛组织者。
这篇笔记记录了我在本次比赛中的工作。
这是一场测试“领域泛化性能”的比赛,Private测试数据来自训练数据中不存在的未来日期。另一方面,数据存在日期变化的因素,完全忽略日期特征是不可取的。
首先,我们进行了对抗训练(区分训练数据和测试数据的任务),发现Citeseq数据可以达到99%的分类准确率。我们担心使用这套特征进行训练会导致对训练数据的过拟合。然而,当我们减少特征数量以降低对抗训练的准确率时,Public LB的分数也大幅下降。
因此,我们决定设计某种生物学特征,并通过模型多样化来提高泛化性能。
Citeseq 通过各种模型的集成获得了很好的分数。另一方面,Multiome 的 1D CNN 表现强劲,与其他模型的集成效果不佳,因此只使用了 1D CNN。
XGBoost 没有提供皮尔逊损失函数,所以我按如下方式实现了它。但是,这种实现学习速度较慢,我希望能稍微改进一下。
from functools import partial
from typing import Any, Callable
import numpy as np
import torch
import torch.nn.functional as F
import xgboost as xgb
def pearson_cc_loss(inputs, targets):
try:
assert inputs.shape == targets.shape
except AssertionError:
inputs = inputs.view(targets.shape)
pcc = F.cosine_similarity(inputs, targets)
return 1.0 - pcc
# https://towardsdatascience.com/jax-vs-pytorch-automatic-differentiation-for-xgboost-10222e1404ec
def torch_autodiff_grad_hess(
loss_function: Callable[[torch.Tensor, torch.Tensor