优化RMSLE的技巧!
在kaggle的一些回归问题中都出现了优化RMSLE的问题,例如https://www.kaggle.com/competitions/playground-series-s4e4/overview
其中RMSLE函数的定义如下,
我们在处理上面的问题时,第一时间会直接自定义对应的损失函数,基本99%的朋友都会这么处理,那么有没有更好的处理呢?
对比方案:
在理论上,直接优化RMSLE和先转化log1p,在使用MSE进行优化这两种方法并不相同。
哪种方法“更好”应该针对手头的特定模型进行测试。
from lightgbm import LGBMRegressor
def msle_loss(y_true, y_pred):
y_pred = np.maximum(y_pred, -1+1e-6)
return ((np.log1p(y_pred)-np.log1p(y_true))/(1+y_pred),
(1-np.log1p(y_pred)+np.log1p(y_true))/(1+y_pred)**2)
在Regression with an Abalone Dataset竞赛中,我们做了对比试验发现:
log1p-转换之后再用expm1对预测进行转换可以得到更好的效果。
参考文献