稀疏向量上的加权余弦相似性

时间:2016-09-02 13:16:03

标签: java vector cosine-similarity

我试图使用余弦相似度计算2个稀疏向量之间的相似性。这工作正常。但是,我想采取额外的步骤,对矢量的每个索引引入加权。例如其中要比较的向量是v1 = [1,0,0,1,1]和v2 = [1,0,0,0,1],加权向量类似于w = [。5,1,1] ,2,1.5]。这可以解释为第一个元素是元素2和3的一半重要,第四个元素是重要的两倍,而最后一个元素是相似性的1.5倍。

这是否可能使用余弦相似性?如果是这样,我将如何修改原始公式以包含这些权重?谢谢!原始java代码如下。

private double score(Vector<Double> v1, Vector<Double> v2) throws Exception{
    int v1Size = v1.size();
    if (v1Size != v2.size()){
        throw new Exception("Vectors not same size");
    }
    double numerator = 0;
    double v1squaresum = 0;
    double v2squaresum = 0;
    for (int i = 0; i < v1Size; i++){
        double v1Val = v1.get(i);
        double v2Val = v2.get(i);
        numerator += (v1Val * v2Val);
        v1squaresum += (v1Val * v1Val);
        v2squaresum += (v2Val * v2Val);
    }
    if (numerator == 0 || v1squaresum == 0 || v2squaresum == 0){
        return 0;
    }
    double denom = (Math.sqrt(v1squaresum) * Math.sqrt(v2squaresum));
    return numerator / denom;
}

1 个答案:

答案 0 :(得分:0)

通过加权输入向量然后归一化来解决,感谢评论。