LogisticRegression.predict_proba
函数究竟返回了什么?
在我的例子中,我得到了这样的结果:
array([
[4.65761066e-03, 9.95342389e-01],
[9.75851270e-01, 2.41487300e-02],
[9.99983374e-01, 1.66258341e-05]
])
从其他计算中,我知道,使用S形函数,第二列是概率。文档说第一列是n_samples
,但不可能,因为我的样本是评论,是文本而不是数字。文档还说第二列是n_classes
。这当然不可能,因为我只有两个类(即+1
和-1
),函数应该是关于计算样本真正属于一个类的概率,而不是类本身。
第一列到底是什么?为什么会出现?
4.65761066e-03 + 9.95342389e-01 = 1
9.75851270e-01 + 2.41487300e-02 = 1
9.99983374e-01 + 1.66258341e-05 = 1
第一列是该条目具有-1
标签的概率,第二列是该条目的+1
标签的概率。请注意,类是按照self-classes_.中的顺序排列的
如果只想获得正标签的预测概率,可以使用logistic_model.predict_proba(data)[:,1]
。这将产生[9.95342389e-01, 2.41487300e-02, 1.66258341e-05]
结果。
正如iulian所解释的,predict_proba()
结果的每一行都是该行中观察到的每个类的概率(并且这些类按照lr.classes_
中的顺序排列)。
事实上,它也与predict()
密切相关,因为每行的最高概率类由predict()
选择。因此,对于任何LogisticRegression
(或者任何分类器),以下都是真的。
lr = LogisticRegression().fit(X, y)
highest_probability_classes = lr.predict_proba(X).argmax(axis=1)
all(lr.predict(X) == lr.classes_[highest_probability_classes]) # True