如何在 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 的成本函数?
class_weight 在 linearSVC 和 LogisticRegression 的损失函数中的作用
scikit-learn 中 LogisticRegression 上的 GridSearchCV