微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对 lightgbm 模型使用 F1 自定义指标-Python

如何解决对 lightgbm 模型使用 F1 自定义指标-Python

我指的是实现 custom_f1 eval_metric 但不知何故不成功的此链接

f1_score metric in lightgbm

我的代码是:

def lgb_f1_score(label,preds):
    #y_true = data.get_label()
    label= val_y.ravel()
    #preds = neigh.predict_proba(val_x)
    
    preds = preds.reshape(-1,1)
    preds = preds.argmax(axis = 1)
    y_hat = np.where(preds < 0.5,1)   # scikits f1 doesn't like probabilities
    print (y_hat)
    print(label)
    return 'f1',f1_score(label,y_hat,average='binary'),True

folds = StratifiedKFold(n_splits=10,shuffle=True,random_state=123)
oof_preds = np.zeros((train_data.shape[0],2))
sub_preds = np.zeros((test_df.shape[0],2))
for n_fold,(trn_idx,val_idx) in enumerate(folds.split(train_data,target_feature)):
    trn_x,trn_y = train_data.iloc[trn_idx],target_feature[trn_idx]
    val_x,val_y = train_data.iloc[val_idx],target_feature[val_idx]
    
    neigh.fit(trn_x,trn_y.ravel(),eval_set=(val_x,val_y.ravel()),eval_metric=lgb_f1_score)
    oof_preds[val_idx] = neigh.predict_proba(val_x)
    print (oof_preds)
    test_df = test_df[main_cols]
    sub_preds += neigh.predict_proba(test_df)/ folds.n_splits

pred_prob=pd.DataFrame(sub_preds,columns=['pred_0','pred_1'])

它不会立即进行预测。折叠 6/7 的示例输出如下所示:。 F1-分数即将为零。

[6] valid_0's binary_logloss: 0.318003  valid_0's f1: 0
[0.09100276 0.03411894 0.15204226 ... 0.05577297 0.03602447 0.13468759]
[0 0 0 ... 0 0 0]
[0. 0. 0. ... 0. 0. 0.]
[7] valid_0's binary_logloss: 0.3158    valid_0's f1: 0
[0.08955322 0.02772688 0.14978066 ... 0.04866767 0.03135154 0.13264376]
[0 0 0 ... 0 0 0]
[0. 0. 0. ... 0. 0. 0.]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。