【问题标题】:Should changing a model's intercept change its Precision and Recall?改变模型的截距是否应该改变它的精度和召回率?
【发布时间】:2017-05-18 05:06:55
【问题描述】:

为了简单起见——只设置一个非常基本的逻辑回归

from sklearn.linear_model import SGDClassifier
from sklearn.metrics import roc_auc_score, roc_curve, precision_recall_curve, classification_report

train_grad_des =  SGDClassifier(alpha=alpha_optimum, l1_ratio=l1_optimum, loss='log')
train_grad_des.fit(train_x, train_y)

为了分析,为预测概率创建一个 score_y 数组

score_y = train_grad_des.predict_proba(test_x)

precision, recall, thresholds = precision_recall_curve(test_y, score_y[:,1], pos_label=1)

如果我设置train_grad_des.intercept_ = 100,那会改变train_grad_des.predict_proba(test_x)返回的概率吗?

似乎概率不应该改变,它们只会在一个方向上“移动”。如果返回的概率不变,那么各个阈值下的精确率和召回率不应该也保持不变吗?

我一直在使用模型对此进行测试,发现当我更改截距时精度和召回率发生了巨大变化,但我不清楚这是否应该发生,如果应该发生,为什么会发生。

【问题讨论】:

    标签: classification logistic-regression


    【解决方案1】:

    为什么不应该改变概率?如果我们剥离一些层并查看适合的模型(具有一个协变量的二元逻辑回归):

    logit(p(y = 1|x)) = alpha + beta*x

    其中logit 是有利于成为第 1 类的对数几率,即:

    logit(p(Y=1)) = log( p(Y=1)/p(Y=0) )

    您可以将alpha(截距)本身解释为属于某个类别的先验概率。因此,如果您更改alpha,您可以期望更改对数赔率以支持进入第 1 类。

    另一种看待它的方式:

    p(y=1|x) = 1 / (1 + e^(-(alpha + beta*x)))

    很明显,如果我改变alpha,我的概率就会改变。

    【讨论】:

      猜你喜欢
      • 2020-10-28
      • 2016-01-09
      • 2022-01-06
      • 2021-10-10
      • 2023-04-07
      • 2023-01-05
      • 2018-02-18
      • 2018-08-16
      • 2011-08-18
      相关资源
      最近更新 更多