免责声明:我在数学方面非常局外..所以也许我所要求的是非常基本的。或者我可能需要帮助来重新表述这个问题。
我想用数字衡量几个序列的一致性,这样我就可以根据这个一致性号来比较和排序它们。
这些是os序列排序的一些可能的例子(根据我的观点)从较不一致到更一致,示例使用二进制值,但它也可以是任意数量的选项:
(*)相等的一致性
还有其他场景我真的不知道如何对它们进行排序,检查以下对,我真的不知道哪些会被定义为更一致:
我要求对如何继续计算这个衡量标准提出任何见解:表格,指向文档的链接,建议,欢迎任何事情。
答案 0 :(得分:1)
我可以计算“更改”的数量(从0到1或反之)并将其除以序列中元素的总数。
如果序列可以有不同于1和0的东西,我会在每个元素计数之间建立“距离”。所以从0和1“成本”改变1,但是从0变为2“成本”2等等。
def get_consistency(sequence)
change = 0
count = 0
previous = nil
sequence.each do |element|
if previous then
# define distance as whatever you want. For numbers, its abs(element-previous)
change += distance(element, previous)
count += 1
end
previous = element
end
count == 0 ? 0 : change / count
end
答案 1 :(得分:1)
基于@kikito实现但具有另一种风格:
def get_consistency(sequence)
proximity =
sequence.each_with_index.map do |element, index|
index > 0 ? distance(element, sequence[index-1]) : 0
end.reduce(:-)
proximity / sequence.length.to_f
end
def distance(value1, value2)
value1 == value2 ? -1 : 1 # Categorical variable
end
结果:
0.7500 <- 1,1,1,1
0.4000 <- 1,1,1,1,2
0.5714 <- 1,1,1,1,2,2,2
0.2857 <- 1,1,1,1,2,2,3
0.0000 <- 1
0.0000 <- 2
-0.5000 <- 1,2
-0.7500 <- 1,2,3,4
-0.2500 <- 1,2,2,3
0.9000 <- 1,1,1,1,1,1,1,1,1,1
0.9900 <- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
0.9703 <- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
-0.9000 <- 1,2,3,4,5,6,7,8,9,10
-0.9000 <- 1,0,1,0,1,0,1,0,1,0
0.7000 <- 1,1,1,1,1,0,0,0,0,0
0.2500 <- 1,1,0,0