【发布时间】:2010-10-19 19:16:34
【问题描述】:
我正在尝试计算一个平均值,而不会被一小组遥远的数字(即 1、2、1、2、3、4、50)甩掉,单个 50 会甩掉整个平均值。
如果我有这样的数字列表:
19,20,21,21,22,30,60,60
平均为 31
中位数为 30
众数为 21 & 60(平均为 40.5)
但是任何人都可以看到,大多数都在 19-22 范围内(5 进,3 出),如果你只获得主要范围的平均值,它就是 20.6(与任何人相比都有很大的不同)以上数字)
我认为你可以这样得到:
c+d-r
其中c 是数字的计数,d 是不同的值,r 是范围。然后,您可以将其应用于所有可能的范围,最高分是从中获得平均值的最佳范围。
例如,19,20,21,21,22 将是 5 个数字、4 个不同的值,范围是 3 (22 - 19)。如果你把它代入我的方程,你会得到 5+4-3=6
如果您将此应用于整个号码列表,则为 8+6-41=-27
我认为这很有效,但我必须创建一个巨大的循环来测试所有可能的范围。在我的小例子中,有 21 个可能的范围:
19-19、19-20、19-21、19-22、19-30、19-60、20-20、20-21、20-22、20-30、20-60、21-21 , 21-22, 21-30, 21-60, 22-22, 22-30, 22-60, 30-30, 30-60, 60-60
我想知道是否有更有效的方法来获得这样的平均值。
或者如果有人一起拥有更好的算法?
【问题讨论】:
-
您要做的是在数据集中识别outliers。像stackoverflow.com/questions/503345/… 这样的东西可能会帮助你。
-
你有没有想过找到标准偏差,然后只接受由平均值 +/- 标准偏差形成的范围内的数字?
-
@Daniel:我想说这个问题甚至与stackoverflow.com/questions/503345/…
-
@Instantsoup 确实如此。当我发表评论时,我投票决定关闭。
-
你的中位数在我看来是 21.5,而不是 30。