You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用LightGBM进行二分类时如何设置分类阈值?

LightGBM二分类任务设置分类阈值的实现方法
  • 完全可以设置自定义分类阈值,和你之前用逻辑回归、随机森林的思路本质一致——都是基于模型输出的概率(或置信度)来手动划分类别,而非依赖默认的0.5阈值。

两种常用实现方式

1. 先获取概率输出,再手动根据阈值判断类别

LightGBM的predict_proba()方法会返回每个样本属于各类别的概率(二分类下是[负类概率, 正类概率]的数组),你可以基于正类概率和自定义阈值生成最终分类结果:

import lightgbm as lgb
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# 生成模拟二分类数据
X, y = make_classification(n_samples=1000, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练LightGBM二分类模型
model = lgb.LGBMClassifier(objective='binary', random_state=42)
model.fit(X_train, y_train)

# 获取测试集的正类概率
y_proba = model.predict_proba(X_test)[:, 1]

# 设置自定义阈值(比如0.6)
custom_threshold = 0.6
y_pred = (y_proba >= custom_threshold).astype(int)

2. 调用predict()时通过threshold参数指定(仅部分版本支持)

部分LightGBM版本允许在调用predict()时直接传入threshold参数,直接得到基于该阈值的分类结果:

# 直接用自定义阈值生成预测结果
y_pred = model.predict(X_test, threshold=custom_threshold)

如何确定最优阈值

如果需要找到适合业务场景的最优阈值,可以结合ROC曲线分析,或者根据精确率、召回率的平衡需求来选择:

from sklearn.metrics import roc_curve, f1_score

# 计算ROC曲线的假阳性率、真阳性率和阈值列表
fpr, tpr, thresholds = roc_curve(y_test, y_proba)

# 筛选使F1分数最高的阈值
best_threshold = None
best_f1 = 0
for thresh in thresholds:
    temp_pred = (y_proba >= thresh).astype(int)
    current_f1 = f1_score(y_test, temp_pred)
    if current_f1 > best_f1:
        best_f1 = current_f1
        best_threshold = thresh
print(f"最优阈值: {best_threshold}, 对应F1分数: {best_f1}")

内容的提问来源于stack exchange,提问作者Chuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:10:33