数据集中最常见的值(有变化)
Most frequent value in dataset (with variation)
这是一个部分是编程,部分是统计数学的问题。
我有一个数据集,我想在其中获取最频繁的数字(模式),问题是我正在处理略有变化的值。
所以通常 {1,2,50,50,90} 最常见的数字是 50
但在我的例子中,数字是这样的:
{1,2,49,50,51,90} 但结果仍然是 50
所以我的问题是如何有效地计算这个数字,这个数字有统计术语吗?
一些伪代码:
Float items.val[] = {1,2,49,50,51,90};
Float threshold = 4;
For (item in items) {
For (subitem in items){
Float dist=Distance(time,subitem)
If (dist < threshold){
item.dist += dist
}
}
}
Output=Sort(item.dist)[0]
有多种方法可以解决这个问题。
(1) 最谨慎、最准确的方法是为观察值假设一个概率模型,并寻找推断值的模式(作为预期值或最可能或其他一些标准)。我猜想在这种情况下这工作量太大了,尽管有无限的时间我当然想那样做。
(2) 构造直方图,寻找密度最大的bin(密度=(#items in bin)/(bin width of bin))。这不一定会产生单个值。
(3) 将参数分布拟合到观测值,并报告拟合分布的模式。
您可能会在 stats.stackexchange.com 上获得更多关于此问题的关注。祝你好运,玩得开心。
编辑:查看您的示例代码后,我发现它与上面的 (2) 没有太大区别。这似乎是一种合理可行的方法。
这是一个部分是编程,部分是统计数学的问题。 我有一个数据集,我想在其中获取最频繁的数字(模式),问题是我正在处理略有变化的值。
所以通常 {1,2,50,50,90} 最常见的数字是 50
但在我的例子中,数字是这样的: {1,2,49,50,51,90} 但结果仍然是 50
所以我的问题是如何有效地计算这个数字,这个数字有统计术语吗?
一些伪代码:
Float items.val[] = {1,2,49,50,51,90};
Float threshold = 4;
For (item in items) {
For (subitem in items){
Float dist=Distance(time,subitem)
If (dist < threshold){
item.dist += dist
}
}
}
Output=Sort(item.dist)[0]
有多种方法可以解决这个问题。
(1) 最谨慎、最准确的方法是为观察值假设一个概率模型,并寻找推断值的模式(作为预期值或最可能或其他一些标准)。我猜想在这种情况下这工作量太大了,尽管有无限的时间我当然想那样做。
(2) 构造直方图,寻找密度最大的bin(密度=(#items in bin)/(bin width of bin))。这不一定会产生单个值。
(3) 将参数分布拟合到观测值,并报告拟合分布的模式。
您可能会在 stats.stackexchange.com 上获得更多关于此问题的关注。祝你好运,玩得开心。
编辑:查看您的示例代码后,我发现它与上面的 (2) 没有太大区别。这似乎是一种合理可行的方法。