388. TReNDS Neuroimaging | trends-assessment-prediction
我们(@yasufuminakama, @berserker408)感谢 Kaggle 和主办方举办了这场有趣的比赛,感谢所有参赛者给了我们很多启发。同时祝贺获胜者!

我们使用 3D-Resnet10 提取了 512 个 3D 地图特征。
正如我在外部数据主题中发布的,我们使用了 @shentao 分享的数据(见 https://www.kaggle.com/c/trends-assessment-prediction/discussion/147797)。更多细节可以查看他的讨论。非常感谢他。
正如 https://www.kaggle.com/c/trends-assessment-prediction/data 中所写:
分数(见 train_scores.csv)不是原始的年龄和评估值。它们经过了转换和去标识化,以帮助保护受试者身份并最大限度地减少数据被不道德使用的风险。尽管如此,它们是直接从原始评估值得出的,因此与提供的特征同样可能存在关联。
在转换之前,出于隐私原因,训练集中的年龄四舍五入到最近的年份。然而,测试集中的年龄没有四舍五入到年份(精度更高)。因此,严重过拟合训练集年龄很可能会对您的提交产生负面影响。
我们需要避免对训练数据的过拟合,为了做到这一点,3D 地图特征帮了大忙。
我们使用了填充数据,通过 SVM+Ridge 进行填充。
NN 基础结构如下:
class CFG:
hidden_size1=64
hidden_size2=128
hidden_size3=6
dropout=0.5
class TabularNN(nn.Module):
def __init__(self):
super().__init__()
self.mlp1 = nn.Sequential(
nn.Linear(26, CFG.hidden_size1),
nn.BatchNorm1d(CFG.hidden_size1),
nn.Dropout(CFG.dropout),
nn.PReLU(),
nn.Linear(CFG.hidden_size1, CFG.hidden_size1//2),
nn.BatchNorm1d(CFG.hidden_size1//2),
nn.Dropout(CFG.dropout),
)
self.mlp2 = nn.Sequential(
nn.Linear(1378, CFG.hidden_size2),
nn.BatchNorm1d(CFG.hidden_size2),
nn.Dropout(CFG.dropout),
nn.PReLU(),
nn.Linear(CFG.hidden_size2, CFG.hidden_size2//2),
nn.BatchNorm1d(CFG.hidden_size2//2),
nn.Dropout(CFG.dropout),
)
self.mlp3 = nn.Sequential(
nn.Linear(512, CFG.hidden_size3),
nn.BatchNorm1d(CFG.hidden_size3),
nn.Dropout(CFG.dropout),
nn.PReLU(),
nn.Linear(CFG.hidden_size3, CFG.hidden_size3//2+1),
nn.BatchNorm1d(CFG.hidden_size3//2+1),
nn.Dropout(CFG.dropout),
)
self.head = nn.Sequential(
nn.Linear(CFG.hidden_size1//2+CFG.hidden_size2//2+CFG.hidden_size3//2+1,
CFG.hidden_size1//2+CFG.hidden_size2//2+CFG.hidden_size3//2+1),
nn.BatchNorm1d(CFG.hidden_size1//2+CFG.hidden_size2//2+CFG.hidden_size3//2+1),
nn.Dropout(0.1),
nn.Linear(CFG.hidden_size1//2+CFG.hidden_size2//2+CFG.hidden_size3//2+1, 5),
)
def forward(self, cont_x):
loading_x = cont_x[:, :26]
fnc_x = cont_x[:, 26:1404]
img_x = cont_x[:, 1404:]
loading_x = self.mlp1(loading_x)
fnc_x = self.mlp2(fnc_x)
img_x = self.mlp3(img_x)
x