0

我有一个程序可以处理几个元素列表(总是长度> 4),每个元素可以有一个“向上”或“向下”属性。

将其放入代码中:

 mylist = [element1, element2, element3]

并且每个元素都有“向上”或“向下”元素(实际问题的简化):

element1 = ["up", "down", "up", "up"]
element2 = ["down", "down","down", "down", "up"]
element3 = ["up", "up", "down", "down", "up", "up", "up"]

我试图找出是否有算法或某种方法可以通过使用“向上”和“向下”元素的计数来推断可能指示列表本身的“方向”的分数。现有代码(我没有编写)使用这两个计数的简单比较:

 if count_up > count_down
     return "up"
 else if count_down > count_up
     return "down"

当然,这很容易产生非常严重的大小影响(一些列表可以包含近 100 个元素,而其他列表只有 5 个)并且当两个计数相等时也会失败。我更喜欢数字分数。我查看了威尔逊分数(Reddit 使用的分数),但它考虑了(据我所知)成功/失败,而我提到的两种状态不能这样定义。

我可以使用任何现有的统计数据吗?

4

2 回答 2

1

评估在很大程度上取决于您的计划的目的和需求。作为一般评分方法,我将“向上”定义为正分 1,将“向下”定义为负分 1。

然后简单地计算平均值:Sum / Count。Mb 将其缩放到 100。只有 ups 的数组将有 100,只有 downs 的数组将有 -100,如果相等,它将为 0。

这个分数应该让您很好地了解数组中的值。

于 2012-05-16T15:30:05.593 回答
1

我的直接反应是(number_up - number_down) / (number_up + number_down)。这基本上放弃了占整体的百分比。明显的缺点是,对于一个非常短的列表,百分比可以从一个相当小的绝对差异(例如,3 上升,1 下降)相当高。

编辑:防止小列表过度影响整体分数的一种可能方法是在等式中添加几个常数:

min_denom = 20;
factor = 10; 

result = ((number_up - number_down) / (number_up + number_down + min_denom)) * factor;

这使您可以在一定程度上考虑相对差异和绝对差异。例如,3 向上/1 向下,它将给出 0.833。6 上/2 下(相同的比率,但每个的两倍)它会给出 1.4。同时,仍然考虑到相对差异,因此(例如)10 up/1 down 将得到 2.9。

实际上,这保留了相同的一般概念,但允许您选择某种程度(可通过更改 min_denom 进行调整),从而为较大的样本赋予额外的权重。严格来说,factor这不是完全必要的——它只是有助于将结果保持在一个方便的范围内。

当然,这可能不合适——对于您正在处理的内容,四个样本的权重可能与 100 个样本的权重相同。另一个可能的缺点是结果值变得更加开放,而不是不错,整洁-1..1。

于 2012-05-16T15:30:12.600 回答