我有一个程序可以处理多个元素列表(总是长度> 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使用的那个),但它认为(据我所知)成功/失败,而我提到的两个状态不能这样定义。
我可以使用现有的统计数据吗?
答案 0 :(得分:1)
评估在很大程度上取决于您的计划的目的和需求。作为一般评分方法,我会定义" Up"得分为1和" Down"得分为1。
然后简单地计算平均值:Sum / Count。 Mb将其缩放为100.只有ups的数组会有100,而只有下行的数组会有-100,如果相等,则为0。
这个分数可以让你很好地了解数组中的值。
答案 1 :(得分: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 up / 1 down,它将给出0.833。随着6上/下2(相同的比例,但每个的两倍),它将给出1.4。同时,相对差异仍然被考虑在内,因此(例如)10上/下1将给出2.9。
实际上,这保留了相同的一般想法,但允许您选择一些程度(通过更改min_denom可调整),您可以为更大的样本提供额外的权重。严格来说,factor
并非完全必要 - 它只是帮助将结果保持在一个方便的范围内。
当然,这可能不合适 - 对于您正在处理的事情,四个样本的重量可能与100的样本相同。另一个可能的缺点是结果值变得更加开放 - 结束了,而不是一个漂亮,整洁的-1..1。