计算两个数组之间的余弦相似度的正确方法?

什鲁蒂·科迪(Shruthi Kodi)

我正在一个项目中,该项目检测两个输入图像(手写签名)的某些特征,并使用余弦相似度比较这两个特征。在这里,我的意思是两个输入图像,一个是原始图像,另一个是重复图像。假设我要提取一个图像(原始图像)的15个此类特征并将其存储在一个数组中(Say,Array_ORG),而其他图像的特征类似地存储在Array_DUP中。现在,我正在尝试计算这两个数组之间的余弦相似度。这些数组是double数据类型。

我列出了我遵循的两种方法:

1)手动计算余弦相似度:

main(){

for(int i=0;i<15;i++)
    sum_org += (Array_org[i]*Array_org[i]);
for(int i=0;i<15;i++)
    sum_dup += (Array_dup[i]*Array_dup[i]);
double magnitude = sqrt(sum_org +sum_dup );
double cosine_similarity = dot_product(Array_org, Array_dup, sizeof(Array_org)/sizeof(Array_org[0]))/magnitude;
}

double dot_product(double *a, double* b, size_t n){
double sum = 0;
    size_t i;

    for (i = 0; i < n; i++) {
            sum += a[i] * b[i];
    }

    return sum;
}

2)将值存储到Mat中并调用点函数:

Mat A = Mat(1,15,CV_32FC1,&Array_org);
Mat B = Mat(1,15,CV_32FC1,&Array_dup);
double similarity = cal_theta(A,B);

double cal_theta(Mat A, Mat B){
double ab = A.dot(B);
double aa = A.dot(A);
double bb = B.dot(B);
return -ab / sqrt(aa*bb);
}

我读到余弦相似度值的范围是-1到1,-1表示两者完全相反,而1表示两者相等。但是第一个函数给我的值是1000,第二个函数给我的值大于1。
请指导我哪个过程正确,为什么?另外,如果余弦相似度值大于1,如何推断相似度?

a_pradhan

余弦相似度的正确定义是:

在此处输入图片说明

您的代码不计算分母,因此值是错误的。

double cosine_similarity(double *A, double *B, unsigned int Vector_Length)
{
    double dot = 0.0, denom_a = 0.0, denom_b = 0.0 ;
     for(unsigned int i = 0u; i < Vector_Length; ++i) {
        dot += A[i] * B[i] ;
        denom_a += A[i] * A[i] ;
        denom_b += B[i] * B[i] ;
    }
    return dot / (sqrt(denom_a) * sqrt(denom_b)) ;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何计算两个数组之间的相似度?

如何计算两个张量之间的余弦相似度?

两个数组之间的余弦距离计算 - Python

计算两个相同形状矩阵的行之间的余弦相似度的最快方法是什么

计算Keras中两个张量之间的余弦相似度

计算 lambda 层中两个张量向量之间的余弦相似度?

如何计算两个字符串向量之间的余弦相似度

Python:两个大型numpy数组之间的余弦相似度

如何计算两个向量的余弦相似度?

计算R中两个单词的余弦相似度?

合并两个 CountVectorizers 并计算余弦相似度

列表中两个词之间的余弦相似度

如何编写一个返回两个文档之间余弦相似度的方法

计算单词之间的余弦相似度

Bigquery中的数组对之间的余弦相似度

计算余弦相似度

Python:计算Pandas中两列之间的tf-idf余弦相似度时出现MemoryError

我有两个公式计算“余弦相似度”,有什么区别?

如何计算PySpark中两个向量的余弦相似度?

如何调试这段代码计算两个unicode文件的余弦相似度?

查找两个字符串(名称)之间的余弦相似度

比较两个数组并获得相似度java

计算两个向量之间的相似度

计算目标字符串与字符串列表之间的余弦相似度的最佳方法-Python

查找两个数组之间的相似性

如何使用余弦度量来计算字典之间的相似度?

计算1D数组与2D数组中所有行之间的余弦相似度的有效方法

在Tensorflow中计算两组向量的余弦相似度

余弦相似度的SQL计算