如何在 LogisticRegression 中获得概率和分类?

Posted

技术标签:

【中文标题】如何在 LogisticRegression 中获得概率和分类?【英文标题】:How to get probabilities along with classification in LogisticRegression? 【发布时间】:2020-10-09 09:15:03 【问题描述】:

我正在使用逻辑回归算法进行多类文本分类。我需要一种方法来获得与类别一起的置信度分数。例如 - 如果我将 text = "Hello this is sample text" 传递给模型,我应该得到 predicted class= Class A and confidence = 80% 结果。

【问题讨论】:

Scikit-learn 分类器将通过其predict() 方法为您提供类预测。如果您想要概率估计,请使用predict_proba()。您可以通过应用阈值轻松地将后者转换为前者:如果预测概率大于 0.50,则预测正类。见scikit-learn.org/stable/modules/generated/… 【参考方案1】:

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

def predict(self, X):
    # decision func on input array
    scores = self.decision_function(X)
    # column indices of max values per row
    indices = scores.argmax(axis=1)
    # index class array using indices
    return self.classes_[indices]

如果调用predict_proba 而不是predict,则返回scores。这是一个训练LogisticRegression的示例用例:

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

X, 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_prob
array([[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_names
classes[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'predicted class = classes[ix] and confidence = y_pred_prob[0,ix]:.2%')
# predicted class = virginica and confidence = 90.75%

【讨论】:

以上是关于如何在 LogisticRegression 中获得概率和分类?的主要内容,如果未能解决你的问题,请参考以下文章

如何评估 scikit learn LogisticRegression 的成本函数?

如何在php中获得下个月的同一天

class_weight 在 linearSVC 和 LogisticRegression 的损失函数中的作用

scikit-learn 中 LogisticRegression 上的 GridSearchCV

C ++:我在一种方法中获得了一个迭代器,如何在另一种方法中通过迭代器修改原始列表?

逻辑回归模型中的内核 LogisticRegression scikit-learn sklearn