目前的训练特征是主成分分析后的特征,经过了降维处理,特征数目已经不多了,所以L1正则化的必要性应该不大,而且L1和L2正则项的尺度目前无法确定是否一致。
特征稀疏性与one-epoch现象密切相关。目前模型似乎没有出现此现象
目前的模型使用了时间变量hour的embedding,模型性能到了auc = 0.721左右。训练关键参数如下:
lr = 0.001; lambda l1 =1e-4; lambda l2 = 1e-4; batch_size = 4096
embedding net 的结构
class EmbeddingNet(nn.Module):
def __init__(self, numerical_dim, catalog_dim, embedding_dim):
super(EmbeddingNet, self).__init__()
# embedding
self.typ = 'embeddingnet'
self.embedding = nn.Embedding(catalog_dim, embedding_dim)
self.numerical = nn.Linear(numerical_dim, 64)
self.fc_output = nn.Linear(embedding_dim+64, 32)
self.fc2 = nn.Linear(32, 16)
self.fc3 = nn.Linear(16, 1)
def forward(self, x_numerical, x_catalog):
x_catalog_embedded = self.embedding(x_catalog).squeeze(1)
x_numerical_processed = F.elu(self.numerical(x_numerical))
x_combined = torch.cat([x_numerical_processed, x_catalog_embedded], dim=1)
x = F.elu(self.fc_output(x_combined))
x = F.elu(self.fc2(x))
x = torch.sigmoid(self.fc3(x))
return x
模型输出的pdf应该是以E(ar)为中心的单峰值的曲线,目前模型倾向于将所有结果预测到0或1上。可能原因和解决方案如下:
可能解决方案:
解决进展:
一些问题:
对几个连续变量按bin=10等宽分桶离散化,各自做 input=10,embedding=10的嵌入,只加入时间变量embed的模型性能如下:
等频分桶后,模型的性能如下:
等宽分桶后,模型性能如下:
深度学习模型在dpt>2后,预测的ar反而下降了。 https://arxiv.org/pdf/2002.05515 可参考这篇文章搭建网络