如何解决LightGBM 使用 init_score 导致没有提升
如果 lightgbm.train 与初始分数 (init_score) 一起使用,它似乎无法提高该分数。
这是一个简单的例子:
params = {"learning_rate": 0.1,"metric": "binary_logloss","objective": "binary","boosting_type": "gbdt","num_iterations": 5,"num_leaves": 2 ** 2,"max_depth": 2,"num_threads": 1,"verbose": 0,"min_data_in_leaf": 1}
x = pd.DataFrame([[1,0.1,0.3],[1,[0,0.9,0.3]],columns=["a","b","prob"])
y = pd.Series([0,1,0])
d_train = lgb.Dataset(x,label=y)
model = lgb.train(params,d_train)
y_pred_default = model.predict(x,raw_score=False)
在上述情况下,没有使用 init_score。预测是正确的: y_pred_default = [0.33333333,...,0.33333333]
d_train = lgb.Dataset(x,label=y,init_score=scipy.special.logit(x["prob"]))
model = lgb.train(params,d_train)
y_pred_raw = model.predict(x,raw_score=True)
在这部分中,我们假设 x 中的“prob”列是我们的初始猜测(可能是其他模型)。我们应用 logit 并将其用作初始分数。但是,模型无法改进,boosting 总是返回 0: y_pred_raw = [0,0]
y_pred_raw_with_init = scipy.special.logit(x["prob"]) + y_pred_raw
y_pred = scipy.special.expit(y_pred_raw_with_init)
上面的这部分显示了我认为将初始分数与提升一起转换回概率的正确方式。由于 boosting 为零,y_pred 产生 [0.3,0.3],这是我们的初始概率。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。