C#快速图近似比较算法

时间:2012-06-04 20:27:25

标签: c# algorithm charts

我有2个系列的值。通过在图表中显示它们,它们非常相似(它们具有相同的行为,当一个成长时,另一个成长,当一个具有小值时,另一个具有小值;但是:可能发生一个正在增长并且其他正在下降)。重要的是它们没有严格相同的值。我对这两张图表的一般行为感兴趣。

现在,我通过在两个图上做平均值并构建2个bool数组来比较它们。当值高于平均值时,bool []中的对应值为true,否则为false。然后我通过使用汉明距离比较这两个bool []。 这个算法有效,但不如我希望的那样好。 (它不会检测图表之间的所有匹配项。)

有没有人知道更好的算法来执行此操作?

3 个答案:

答案 0 :(得分:2)

计算两个数字列表之间距离的一种简单方法是计算它们之间差异的平方和。这在统计数据中经常使用。

double sum = 0.0;
for (int i = 0; i < N; i++) {
    double diff = a[i] - b[i];
    sum += diff*diff;
}

但基本问题是,你从这种分析中得到了什么样的陈述。


另一种可能性是计算两个系列之间的Correlation Coefficient。系数+1表示两个系列符合100%,0表示两个系列之间没有明显的关系,-1表示它们彼此完全相反。

答案 1 :(得分:1)

为了获得更好的性能,我会使用“零均值测试”。它包括检查两个样本的平均值是否使用置信区间显着不同。

基本上,它包括:

  1. 计算图表所有点的差异
  2. 计算这些差异的平均值和标准误差(下一点需要)
  3. 计算确定置信度的置信区间(95%,99%,......,取决于您想要的精度)
  4. 如果该间隔包含值0,则图表不会不同。

    这种方法的问题是你需要一个统计库来计算间隔,所以我不确定它是否适合你的问题

答案 2 :(得分:0)

现在你只能区分大于或小于&amp;的2个状态。相等。

我会使用1,0 -1或创建一个枚举来表示更大,相同,更少。通过这种方式,您可以区分所有三种状态。