0

我正在尝试为我的算法找到最佳的 3 元组参数组合。对于每种可能的组合,我都有几个结果。现在,我首先按照最高成功次数对每个元组 (x,y,z) 进行排序,方式如下:

(x,y,z): ((1.0, 100 times), (0.8, 20 times), (0.5, 200 times), (0.0, 10 times))
(x1,y1,z1): ((1.0, 80 times), (0.9, 100 times), (0.5, 50 times), (0.0, 100 times))
(x2,y2,z2): ((1.0, 80 times), (0.9, 20 times), (0.5, 200 times), (0.0, 30 times))

...这意味着对于元组 (x,y,z) 我的成功率为 1.0 100 次,成功率为 0.8 20 次,等等。

现在,恐怕这样的排序是幼稚的,因为它没有考虑到这一点,例如,(x1,y1,z1)有大量的失败(0.0)和大量的成功(1.0)。

我应该如何考虑到这一点?

4

1 回答 1

1

答案很大程度上取决于您对“最佳”的定义!您是否希望有一种算法在 100% 的时间里总是给出 0.8 的成功,或者在 80% 的时间里给出 1.0 的成功和 20% 的时间里给出 0.0 的失败,或者那些对于您的目的来说是等价的?

您可以采取的一种非常简单的方法是对结果进行加权求和,如下所示:

rank = 0;
total_results = 0;
for each (success_rate, number_of_results_at_this_rate) in this_data; do
    rank += (success_rate * number_of_results_at_this_rate);
    total_results += number_of_results_at_this_rate;
done
rank = rank / total_results;

(当然,如果 total_results 始终保持不变,这可以简化,就像上面的示例一样)

这将为您的示例提供以下排名:

(x,y,z) = (100 + 16 + 100 + 0) / (100+20+200+10) = about 0.65
(x1,y1,z1) = (80 + 90 + 25 + 0) / (80+100+50+100) = about 0.59
(x2,y2,z2) = (80 + 18 + 100 + 0) / (80+20+200+30) = 0.6
于 2012-08-21T14:32:25.777 回答