LightGBM 自定义metric


def self_loss(labels, preds):

    preds = preds.get_label()

    k = labels - preds

    # 对labels求导

    grad = np.where(k>0, 2*np.abs(preds)/(np.power(np.abs(labels)+np.abs(preds), 2)+0.1), -2*np.abs(preds)/(np.power(np.abs(labels)+np.abs(preds), 2)+0.1))

    hess = np.where(k>0, -4*np.abs(preds)/(np.power(np.abs(labels)+np.abs(preds), 3)+0.1), 4*np.abs(preds)/(np.power(np.abs(labels)+np.abs(preds), 3)+0.1))

    return grad, hess

def self_metric(labels, preds):

    preds = preds.get_label()

    score = 1-np.mean(np.abs(labels-preds)/(np.abs(labels)+np.abs(preds)+0.1))

    return 'self_metric', score, True

gbm = lgb.train(params,

                    lgb_train,

                    num_boost_round=3000,

                    valid_sets=lgb_eval,

                    fobj = self_loss,

                    feval = self_metric,

                    early_stopping_rounds=30)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM