如何在逻辑回归中获取分类概率?

我在使用逻辑回归算法进行多类文本分类。我需要一种方法来获取与类别一起的信心得分。例如,如果我将文本 = “你好,这是样本文本” 传递给模型,我应该得到 预测类别 = 类别 A 和信心 = 80% 作为结果。


回答:

对于 scikit-learn 中的大多数模型,我们可以通过 predict_proba 获取类的概率估计。请注意,这是逻辑函数的实际输出,得到的结果分类是通过选择概率最高的输出获得的,即在输出上应用了 argmax。如果我们查看 这里 的实现,你可以看到它本质上是在做以下操作:

def predict(self, X):    # 对输入数组进行决策函数    scores = self.decision_function(X)    # 每行最大值的列索引    indices = scores.argmax(axis=1)    # 使用索引对类数组进行索引    return self.classes_[indices]

在调用 predict_proba 而不是 predict 的情况下,返回的是 scores。这是一个使用 LogisticRegression 进行训练的示例用例:

from sklearn.datasets import load_irisfrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import train_test_splitX, y = load_iris(return_X_y=True)X_train, X_test, y_train, y_test = train_test_split(X, y)lr= LogisticRegression()lr.fit(X_train, y_train)y_pred_prob = lr.predict_proba(X_test)y_pred_probarray([[1.06906558e-02, 9.02308167e-01, 8.70011771e-02],       [2.57953117e-06, 7.88832490e-03, 9.92109096e-01],       [2.66690975e-05, 6.73454730e-02, 9.32627858e-01],       [9.88612145e-01, 1.13878133e-02, 4.12714660e-08],       ...

我们可以通过取 argmax 得到概率,如前所述,并按如下方式索引类数组:

classes = load_iris().target_namesclasses[indices]array(['virginica', 'virginica', 'versicolor', 'virginica', 'setosa',       'versicolor', 'versicolor', 'setosa', 'virginica', 'setosa',...

因此,对于单个预测,通过预测的概率我们可以轻松地做如下操作:

y_pred_prob = lr.predict_proba(X_test[0,None])ix = y_pred_prob.argmax(1).item()print(f'预测类别 = {classes[ix]} 和信心 = {y_pred_prob[0,ix]:.2%}')# 预测类别 = virginica 和信心 = 90.75%

Related Posts

多维度Top-k评分

例如,在机器学习中的自然语言处理中,通常使用波束搜索来…

R – Caret train() “错误:停止” 与 “在newdata中未找到对象中使用的所有变量名”

我正在尝试为蘑菇数据构建一个简单的朴素贝叶斯分类器。我…

创建训练和测试数据集分割,数据嵌套在多个文件夹中

我正在准备数据以训练一个图像识别模型。目前我有一个文件…

我的神经网络预测出现错误:IndexError: list index out of range

我正在进行一个简单的垃圾邮件/非垃圾邮件文本分类。我的…

python 给出数组是一维的,但索引了两个维度错误

我已经为 miniBatchGradientDesce…

TensorFlow自定义训练步骤使用不同的损失函数

背景 根据TensorFlow文档,可以使用以下方式执…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注