Ruby解决方案用于查找最相似的数值数据集或曲线?

时间:2015-06-20 19:58:03

标签: ruby math statistics

我试图找到相对于目标数据集的最佳/最接近的匹配候选数据集。下面是一个示例数据集。请注意,较高的值并不意味着"更好",因此偏差计算为绝对值。

示例数据集:

Graph of table

上图说明了候选人A 是"更好"匹配候选人B ,即使 A 数据点的累积偏差实际上相对于目标更高。

首先加上与目标的每个点偏差(欧几里德距离)似乎是合理的,然而,这并不能解释可能完全排除候选人的单个点的大偏差。我宁愿避免为任何一个数据点添加任意截止值或丢弃异常值。

以上图示的Ruby实现:

target     = [0.80, 0.80, 0.80, 0.80, 0.80, 0.80, 0.80, 0.80, 0.80]
candidates = {
  a: [0.88, 0.72, 0.84, 0.85, 0.88, 0.93, 0.65, 0.90, 0.95],
  b: [0.80, 0.80, 0.80, 0.00, 0.80, 0.80, 0.80, 0.80, 0.80]
}
distance   = { a: 0.0, b: 0.0 }

candidates.each do |candidate, values|
  values.each_with_index do |value, index|
    distance[candidate] += (value - target[index]).abs
  end
  puts "Distance #{candidate.upcase}: #{distance[candidate]}"
end

=> Distance A: 0.86
=> Distance B: 0.80

所以,我正在寻找更好的方法来惩罚更大的偏差或推广匹配(或者一种定义什么更好"适合的方式)。平均数是什么?广场?高斯滤波?

是否有任何Ruby宝石已经拥有许多有用的统计算法来做这类事情?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可能会对format table from docs

感兴趣

如果您在Ruby中进行大量计算编程,您可能需要查看linefit宝石。

将来,如果您正在寻找宝石建议,请查看SciRuby。它是一个非常有用的宝石系列。