Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 寻找数据集之间的相似性_Algorithm_Math_Hash_Dataset - Fatal编程技术网

Algorithm 寻找数据集之间的相似性

Algorithm 寻找数据集之间的相似性,algorithm,math,hash,dataset,Algorithm,Math,Hash,Dataset,我有包含不同值的数据集: Set1={X1,X2,…,Xn} Set2={X1,X2,…,Xn} X值有不同的范围(这正是我无法找出解决问题所需的算法的原因)-一些值严格来说是[0.0-1.0]值,其他值可能在不同/任何范围内 我需要找出一种方法来“分组”这些集合,或者换句话说,找到两个给定集合之间的“相似性” 显然,我可以简单地编写长链的“IF”语句,将每个值与另一个值进行比较,如果它们相差一定的增量,我可以指出两个给定的集合不是“相似”的。问题是,我的集合非常庞大,包含动态数据。因此,我需

我有包含不同值的数据集:

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 | 我真的很感激任何提示或想法如何实施它

更新:

通过阅读评论,我意识到也许我也应该改变一下我的问题:对于一个好的“相似性”指标,你有什么建议

我所说的“相似性”是指一些动态值,表明集合的值有多“接近”。例如,如果我有一个测试集:SetA{0.5100},那么SetB{0.5100}应该产生1(或者其他一些表示完全匹配的值)。同时,将SetA与SetC{0.1300}进行比较应该返回一个更低的“匹配”值,而SetD{0.45101}应该返回一个类似于“完美匹配”的值。这里需要注意的关键点是,例如,0.45和0.5的值比100和300的值“更相似”,因为:| 0.45-0.5 |/max(0.45,0.5)<| 100-300 |/max(100300)


如果我只是计算两个集合之间的值差之和,它不会给我提供任何有意义的结果(因为两个集合可以包含完全不同的数字(从逻辑角度来看),但会相互抵消,从而给出错误的结果)

因此,您想知道两个对象之间的距离。在数学中,一个集合加上一个运算,为集合中的对象给出一个距离,称为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它可能不会影响算法方法,但可能会影响实现路线,特别是在“通用”意义上。