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

如何修改sklearn中LogisticRegression的预测阈值为0.7

实现方法

sklearn的LogisticRegression默认predict()方法的0.5判定阈值没有提供直接修改的参数,不用硬改源码,两种常用实现方式如下:

  • 方式1:手动获取概率后按自定义阈值判定(简单场景最常用)
    不要直接调用默认的predict(),先通过predict_proba()拿到样本属于类别1的预测概率,再自己做阈值判断即可:

    model = LogisticRegression().fit(X_train,y_train)    
    # 取出所有测试样本属于类别1的预测概率
    pos_proba = model.predict_proba(X_test)[:, 1]
    # 阈值设为0.7,大于阈值判为1,否则判为0
    predictions = (pos_proba > 0.7).astype(int)
    

    提示:predict_proba()返回的数组列顺序和model.classes_属性一一对应,二分类场景下类别1的概率默认在索引为1的列,如果你的类别编码不是0/1,可以先打印model.classes_确认类别1对应的索引再取值。

  • 方式2:自定义子类重写predict方法(适合需要复用、要接入sklearn生态做交叉验证/网格搜索的场景)
    自己写一个继承原生LogisticRegression的类,把阈值作为初始化参数,重写预测逻辑即可,后续用法和原生模型完全兼容:

    from sklearn.linear_model import LogisticRegression
    
    class CustomThresholdLogisticRegression(LogisticRegression):
        def __init__(self, threshold=0.5, **kwargs):
            self.threshold = threshold
            super().__init__(**kwargs)
        
        def predict(self, X):
            pos_proba = self.predict_proba(X)[:, 1]
            return (pos_proba > self.threshold).astype(int)
    

    调用时直接传入目标阈值即可:

    # 初始化时直接指定0.7的判定阈值
    model = CustomThresholdLogisticRegression(threshold=0.7).fit(X_train, y_train)
    # 直接调用predict就会按0.7阈值输出结果
    predictions = model.predict(X_test)
    

注意:判定阈值的调整会直接影响模型在类别1上的精确率、召回率表现:阈值越高,判为类别1的条件越严格,类别1的精确率通常会升高、召回率会降低,建议结合验证集的业务指标要求选择最优阈值,不要随意设定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:39:17