问题描述
[id,feature_1,feature_2,...,feature_N,label_1,label_2,label_3]
这里的标签是 1,0 代表 True,False。我为每个标签独立建立一个模型,
model_1: [id,label_1]
model_2: [id,label_2]
model_3: [id,label_3]
所以最后我有 3 个模型可以用来预测每个标签类型,我可以得到 如果 label_1(2 或 3)对每一行都是 True/False,则概率介于 0 和 1 之间。
我想将这些概率汇总为一个分数。然而,问题是这些是相互依赖的。所以如果我独立对待他们,我会遇到这样的情况
[label_1,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
这似乎没问题,但我想知道是否有更好的方法来处理这个问题?
解决方法
假设我们有
import statistics as stats
p1 = [1.0,1.0,1.0]
p2 = [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
更有意义,所以我会使用算术平均而不是几何平均。