testing - 参数扫描 : rank parameters according to output

标签 testing sorting parameters combinations

我正在尝试为我的算法找到最佳的三元组参数组合。对于每种可能的组合,我都有几个结果。现在我首先按照最高成功次数对每个元组 (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)。

我应该如何考虑这一点?

最佳答案

答案很大程度上取决于您对“最佳”的定义!您是希望有一种算法始终在 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

关于testing - 参数扫描 : rank parameters according to output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12056799/

相关文章:

testing - 在不打开浏览器的情况下使用 chromeDriver 运行 Geb 测试

jquery - DataTables 对仅包含字形的单元格进行排序

Python、ImageMagick 和 `subprocess`

java - 测试使用其他测试的内部 ContextConfiguration

testing - Polarion:xUnitFileImport 创建重复的测试用例,而不是引用现有的测试用例

c++ - 按顺时针顺序对图邻接列表中的顶点进行排序

android - SQLite Random() 在 ORDER BY 中排序不正确

language-agnostic - 参数和参数之间的区别

javascript - 如果性能在 Javascript 中很重要,我应该传递封装在对象中的函数参数还是一个一个地传递?

c# - 通过 HCK API 错误进行队列测试