我正在从(http://www-stat.stanford.edu/~jhf/ftp/trebst.pdf)算法5中实现MART, 我的算法“工作”说少数据(3000训练数据文件,22个特征)和J = 5,10,20(叶子节点数)和T = 10,20。它给我很好的结果(R-Precision是0.30到0.5为培训)但是当我尝试运行一些大的训练数据(70K记录)时它给我运行时下溢错误 - 我认为应该是 - 只是不知道如何解决这个问题?
下溢错误来到这里,计算成本梯度(或伪响应):
这里y_i是{1,-1}标签,所以如果我只是尝试:2 / exp(5000)它的分母溢出!
只是想知道我是否可以“正常化”这个或“阈值”这个,但后来我在计算“标签”(那个pdf中的伽玛)中使用这个伪响应,然后用这些伽马来计算模型分数。
答案 0 :(得分:0)
您可以使用if包装该表达式。
exp_arg = 2 * y_i * F_m_minus_1
if (exp_arg > 700) {
// assume exp() overflow, result of exp() ~= inf, 2 / inf = 0
y_tilda_i = 0
else // standard calculation
我没有特别实现梯度增强,但我需要在一些神经网络计算中做到这一点。
答案 1 :(得分:0)
@rrenaud很接近,我做的是:如果exp_arg> 16或exp_arg< -16使我的exp_arg = 16(或-16)并且它有效! (对于1.2GB数据和700个功能!)