我们目前正在使用带有 Tweedie 损失的 XGBoost 模型来解决一个效果很好的回归问题,现在我想将我们的模型转移到 Keras 并体验神经网络,有人知道我如何为 Keras 实现 Tweedie 损失吗?我只关心 p=1.5 的实例,它在 XGBoost 中为我们提供了最好的结果。
谢谢
我们目前正在使用带有 Tweedie 损失的 XGBoost 模型来解决一个效果很好的回归问题,现在我想将我们的模型转移到 Keras 并体验神经网络,有人知道我如何为 Keras 实现 Tweedie 损失吗?我只关心 p=1.5 的实例,它在 XGBoost 中为我们提供了最好的结果。
谢谢
我最终实现了这样的事情:
def tweedieloss(y_true, y_pred):
p=1.5
dev = 2 * (K.pow(y_true, 2-p)/((1-p) * (2-p)) -
y_true * K.pow(y_pred, 1-p)/(1-p) +
K.pow(y_pred, 2-p)/(2-p))
return K.mean(dev)
我不知道它有多正确,现在它似乎正在工作。
嘿,感谢您分享您的解决方案,我也在寻找这个!坦率地说,我很惊讶 Tweedie 分布并不那么受欢迎,因为零膨胀数据相当普遍。
只是想对此添加一些评论,我正在提交一个“答案”,因为评论有严格的字符限制:
您的解决方案是Tweedie 偏差,它与 ,这意味着您可以安全地放弃乘数 2 并改为最小化负对数似然(不应该影响您的结果)
从技术上讲,您的公式中有一个小遗漏:在第一个比率中,而不是, 它应该是虽然我认为在实践中你只会使用非负值,所以没关系
最后,我还要注意这个定义只适用于方差功率值,对于那些特殊情况,请参阅上述关于 Tweedie 偏差的链接