【问题标题】:Scikit learn - output average probability of right choiceScikit learn - 输出正确选择的平均概率
【发布时间】:2018-06-05 04:57:21
【问题描述】:

所以我正在使用 Scikit-Learn 处理三个结果数据框。我更感兴趣的是预测准确的概率,而不是预测正确的结果。因此我使用 predict_proba 而不是 predict,然后我可以输出每个测试实例 a、b 或 c 的所有概率,这是平滑的!

有没有办法像 accuracy_score(y_predictions, y_test) 一样做一个“概率分数”?这样我就能得到它赋予每个正确结果的平均概率?

我可以通过将其复制到 Excel 或类似文件来手动完成此操作,但这需要很多时间..

谢谢!

编辑 - 这是 predict_proba 的输出:

       A    B    C
1    [ 0.6  0.3  0.1]      
2    [ 0.4  0.1  0.5]
3    [ 0.4  0.3  0.3]
4    [ 0.3  0.1  0.6]
...

现在,假设实例 1 和 2 的结果是 A,实例 3 的结果是 C,实例 4 的结果是 B,这将使我的模型的“正确结果的平均概率”为 (0.6 + 0.4 + 0.3 + 0.1) / 实例数(在本例中为 4),即 0.35 或 35 %。

(当然)我将准确的结果存储在 y_test 中,因此我希望能够快速获得测试集中大约 500 个实例的正确结果的平均概率。

【问题讨论】:

  • 您能否添加一个从predict_proba 获得的输出示例,以及您对“概率分数”的期望示例?
  • 完成!希望它足够清楚 =)
  • 不知道你为什么要这样做?但是您是否尝试过 sklearn.metrics.log_loss。它惩罚错误的过度自信实例。
  • 因为 A 和 C 的实际概率比 B 高很多,而我的模型的全部目的是最正确地预测概率,而不是实际结果。

标签: python pandas scikit-learn


【解决方案1】:

假设您在y_test 中有整数编码标签:

import numpy as np
probas = np.array([[0.6, 0.3, 0.1], [0.4, 0.1, 0.5], [0.4, 0.3, 0.3], [0.3, 0.1, 0.6]])
y_test = np.array([[0], [0], [2], [1]])
print(y_test)

[[0]
 [0]
 [2]
 [1]]

为了得到想要的结果,你可以使用你的真实标签从probas的每一行中选择你感兴趣的值,然后取平均值。

y_probas = np.choose(y_test.T, probas.T)
print(y_probas)

[[ 0.6  0.4  0.3  0.1]]

avg_proba = np.mean(y_probas)
print(avg_proba)

0.35

不过,请考虑使用Log Loss,这是一种更标准的预测概率损失指标:

from sklearn.metrics import log_loss
log_loss(y_test, probas)

1.2334185632400319

【讨论】:

  • 非常好!正是我想要的!谢谢!
【解决方案2】:

您可以编写自定义Python函数来执行此操作。

import pandas as pd

prob = pd.DataFrame([[ 0.6 ,0.3,0.1],[ 0.4 ,0.1,0.5],[ 0.4 ,0.3,0.3],[ 0.3 
                      ,0.1,0.6]],columns=['A','B','C'])

true = pd.Series(["A","A","C","B"])

def avg_prob(true,prob):
    sum = 0
    for i,p in enumerate(true):
        sum += prob.loc[i,p]
    return sum/len(true)

avg_prob(true,prob)

还调查概率校准(http://scikit-learn.org/stable/modules/calibration.html),了解课程的更好校准概率

【讨论】:

    猜你喜欢
    • 2015-10-25
    • 2012-08-23
    • 2018-01-24
    • 1970-01-01
    • 2021-09-28
    • 2017-12-19
    • 2015-08-20
    • 2017-01-05
    • 2022-12-17
    相关资源
    最近更新 更多