我使用了一个使用armadillo C++线性库的余弦相似函数。我的代码是下一个:使用Armadillo C++的余弦相似性给我带来负面结果
double cosine_similarity(rowvec A, rowvec B)
{
double dot = as_scalar(A*B.t());
double denomA = as_scalar(A*A.t());
double denomB = as_scalar(B*B.t());
return dot/(sqrt(denomA) * sqrt(denomB)) ;
}
我有此矩阵作为一个例子:
-0.0261 -0.6780 -0.7338 0.0345
-0.0230 0.0082 -0.0400 -0.7056
-0.2590 -0.7052 0.6590 -0.0371
-0.9650 0.2072 -0.1551 0.0426
-0.0230 0.0082 -0.0400 -0.7056
当我计算第二行之间的余弦相似性VS所有的i行得到的结果如下:
相似度[1,0]:-1.07944e-16
相似度[1,1]:1
相似度[1,2]:-1.96262e-17
相似度[1,3]:-1.71729e-16
相似度[1,2 4 ]:1
这是正确的吗?即使他们的意思是零,我也担心负面结果。我想知道如果我做错了什么。 cosine_similarity用于这种方式:
for (unsigned int row = 0; row < redV.n_rows ; row++)
{
double ans = cosine_similarity(redV.row(indicate), redV.row(row));
cout << "Similarity [" << indicate << "," << row << "]: " << ans << endl;
cout << "Similarity [" << indicate << "," << row << "]: " << norm_dot(redV.row(indicate), redV.row(row)) << endl;
}
为什么不只是使用[norm_dot()](http://arma.sourceforge.net/docs。 html#dot)函数呢? – hbrerkere
谢谢你的建议。我想到了同样的结果。当sm在matlab上做同样的计算时,我得到的数字略有不同.. –
您还没有显示完整的代码。计算'相似性[1,0]'的代码是什么?显示如何使用'cosine_similarity()'的具体示例。 – hbrerkere