Algorithm 寻找数据集之间的相似性
我有包含不同值的数据集: Set1={X1,X2,…,Xn} Set2={X1,X2,…,Xn} X值有不同的范围(这正是我无法找出解决问题所需的算法的原因)-一些值严格来说是[0.0-1.0]值,其他值可能在不同/任何范围内 我需要找出一种方法来“分组”这些集合,或者换句话说,找到两个给定集合之间的“相似性” 显然,我可以简单地编写长链的“IF”语句,将每个值与另一个值进行比较,如果它们相差一定的增量,我可以指出两个给定的集合不是“相似”的。问题是,我的集合非常庞大,包含动态数据。因此,我需要一个通用函数来计算每个集合的某种散列值(至少我是这么想的): int hash1=HashFunction(Set1) int hash2=HashFunction(Set2) if(| hash1-hash2 |Algorithm 寻找数据集之间的相似性,algorithm,math,hash,dataset,Algorithm,Math,Hash,Dataset,我有包含不同值的数据集: Set1={X1,X2,…,Xn} Set2={X1,X2,…,Xn} X值有不同的范围(这正是我无法找出解决问题所需的算法的原因)-一些值严格来说是[0.0-1.0]值,其他值可能在不同/任何范围内 我需要找出一种方法来“分组”这些集合,或者换句话说,找到两个给定集合之间的“相似性” 显然,我可以简单地编写长链的“IF”语句,将每个值与另一个值进行比较,如果它们相差一定的增量,我可以指出两个给定的集合不是“相似”的。问题是,我的集合非常庞大,包含动态数据。因此,我需
如果我只是计算两个集合之间的值差之和,它不会给我提供任何有意义的结果(因为两个集合可以包含完全不同的数字(从逻辑角度来看),但会相互抵消,从而给出错误的结果)因此,您想知道两个对象之间的距离。在数学中,一个集合加上一个运算,为集合中的对象给出一个距离,称为a
显然,度量有几种可能的选择。常见的是绝对差之和(距离=|x1-y1 |+| x2-y2 |+…)和平方差之和(距离=(x1-y1)²+(x2-y2)²+…)。如果这些指标不适合您,请定义“相似”的含义。因为您的集合具有相同的基数,但您不关心顺序(即,它们是集合,而不是向量),我建议的一种方法是:对集合进行排序并将其视为向量 现在的问题是,在R2上选择哪个 选择很多。基本上,您可以选择R上的任何度量并按坐标组合它们 所以,如果你想要相对差异,你可以定义 相对距离(x,y)=绝对值(x-y)/最大值(x,y) 地区1(A,B)=sumi(相对地区(ai,bi)) 或 地区2(A,B)=sqrt(sumi(相对地区(ai,bi)2))
请记住,A和B是排序的,因此ai应该匹配bi。您必须对“相似”的含义进行显著的细化,才能得到有意义的答案。语言的选择在某种程度上会影响响应-您使用的是什么堆栈?设置的元素是什么?数字?你对相似性的概念是什么?例如,{1;2;3}比{1.1;1.9;3.01}更接近{1;2;4}吗?@JerKimball好吧,我用的是C#,但我认为不应该matter@rexem它可能不会影响算法方法,但可能会影响实现路线,特别是在“通用”意义上。