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