• lightgbm使用multiclass训练二分类模型


    由于lgbm.predict_proba输出的结果维度和样本的数据集不一致,导致dataframe进行列赋值的时候报错,下面可以通过修改num_class来验证

    # -*- coding: utf-8 -*-
    """
    
    @Time  : 2022/7/29 14:48
    @Author: Breeze
    @File  : 多分类测试输出.py
    """
    import sys
    
    from lightgbm import LGBMClassifier
    import numpy as np
    import os
    print(sys.version)
    clf_multiclass = LGBMClassifier()
    n_estimators = 100
    lr = 0.01
    max_depth = 3
    l1 = 0.1
    l2 = 0.1
    subsample_for_bin = 32
    min_child_sample = 32
    num_class = 3
    wd_namelist_model = LGBMClassifier(
            objective='multiclass',  # 'multilogloss
            num_class=num_class,   # 'regression' for LGBMRegressor, 'binary' or 'multiclass' for LGBMClassifier, 'lambdarank' for LGBMRanker.
            n_estimators=n_estimators,
            learning_rate=lr,
            num_leaves=2**max_depth-1, # (0, 2^max_depth - 1]
            colsample_bytree=0.6,
            subsample=0.6,
            max_depth=max_depth,  # 10
            reg_alpha=l1,  # 0.04
            reg_lambda=l2,
            subsample_for_bin=subsample_for_bin,
            subsample_freq=32,  # 12
            min_split_gain=0.01,
            min_child_weight=0.01,
            min_child_sample=min_child_sample,
            silent=False,
            verbose=1,
            # importance_type='gain',
            random_state=2022)
    train_data = np.random.rand(50000, 100)  # 500 entities, each contains 100 features
    train_label = np.random.randint(num_class, size=50000)  # 5 targets
    val_data = np.random.rand(5000, 100)
    val_label = np.random.randint(num_class, size=5000)
    
    # wd_namelist_model.fit(train_data,train_label)
    
    wd_namelist_model.fit(train_data, train_label
                          # , sample_weight=train_weight
    
                          , eval_set=[(train_data, train_label),(val_data, val_label)]
                          # , eval_sample_weight=[train_weight, val_weight]
                          #                           , eval_metric=['auc']
                          , eval_metric=['auc_mu']  #  binary_logloss  multi_logloss,cross_entropy
                          , verbose=10
                          , early_stopping_rounds=50)
    # val_pred = wd_namelist_model.predict(val_data)
    val_pred = wd_namelist_model.predict_proba(val_data)# [0,:]
    
    print(val_pred.shape)

    如果想要用多分类,来训练二分类目标变量,可以通过如下方法获取概率值

    wd_namelist_model.predict_proba(val_data)[0,:len(val_data)]

  • 相关阅读:
    【Qt6】列表模型——抽象基类
    EDI入门讲解——一篇文章告诉你EDI是什么
    【目标检测】39、一文看懂计算机视觉中的数据增强
    对开源自动化测试平台MeterSphere的使用感触
    宝玉:Sora 如何改变我们的生活
    MySQL事务底层原理
    STM32定时器篇——通用定时器的使用(定时中断,PWM输出)
    k8s优雅停服
    测试报告 数据分析平台
    Bentley二次开发教程27-交互窗口-界面开发方法
  • 原文地址:https://blog.csdn.net/mtj66/article/details/126059400