首页 > 解决方案 > 汇总相关概率

问题描述

我在数据框中有一个带有特征和标签的模型,其列如下:

[id, feature_1, feature_2, feature_2,...,feature_N, label_1, label_2, label_3]

这里的标签是 1、0 代表真、假。我为每个标签独立构建模型,

model_1: [id, feature_1, feature_2, feature_2,...,feature_N, label_1]

model_2: [id, feature_1, feature_2, feature_2,...,feature_N, label_2]

model_3: [id, feature_1, feature_2, feature_2,...,feature_N, label_3]

所以最后我有 3 个模型可以用来预测每种标签类型,如果每行的 label_1(2 或 3)为真/假,我可以获得 0 到 1 之间的概率。

我想将这些概率汇总为一个分数。然而,问题是这些都是依赖的。因此,如果我独立对待他们,我会遇到一种情况,我可能会得到

[label_1, label_2, label_3] = [1.0, 1.0, 0.001],  0.99*0.99*0.001 = 0.0001

现在这里的问题是,有时我们需要预测的可能已经有 label_1 和 label_2 但没有 label_3,所以我们只预测 label_3。这个汇总分数太小了,因为 label_1 和 label_2 是已知的并且是 True,但是汇总会说它们是错误的 - 但我们可能对 0.001 的预测没有那么自信。为了解决这个问题,我使用几何平均值

(1.0*1.0*0.001)^(1/3) = 0.10

这似乎工作正常,但我想知道是否有更好的方法来处理这个问题?

标签: pythonmachine-learningmathstatisticsdata-science

解决方案


假设我们有

import statistics as stats 

p1 = [1.0, 1.0, 1.0]
p2 = [1.0, 1.0, 0.001]

几何平均数:

stats.geometric_mean(p1)  # 1.0
stats.geometric_mean(p2)  # 0.10000000000000002

但是用算术平均值

stats.mean(p1)  # 1.0
stats.mean(p2)  # 0.667

实现更精确:

def am(ps):
    return sum(ps)/len(ps)

am(p1)  # 1.0
am(p2)  # 0.6669999999999999

更有意义,所以我会使用算术平均值而不是几何平均值。


推荐阅读