我试图找到相对于目标数据集的最佳/最接近的匹配候选数据集。下面是一个示例数据集。请注意,较高的值并不意味着"更好",因此偏差计算为绝对值。
示例数据集:
上图说明了候选人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宝石已经拥有许多有用的统计算法来做这类事情?
谢谢!