Взвешенное косинусное подобие на разреженных векторах

Я пытаюсь вычислить сходство между двумя разреженными векторами, используя косинусное сходство. который работает нормально. Тем не менее, я хотел бы сделать дополнительный шаг, введя взвешивание для каждого индекса вектора. например где векторы для сравнения: v1 = [1, 0, 0, 1, 1] и v2 = [1, 0, 0, 0, 1], а вектор весов имеет вид w = [.5, 1, 1 , 2, 1.5]. Это можно интерпретировать так, что первый элемент вдвое менее важен, чем элементы 2 и 3, а 4-й элемент вдвое важнее, а последний элемент в 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;
}

person holtc    schedule 02.09.2016    source источник
comment
Возможный дубликат Расчет взвешенного сходства   -  person bradimus    schedule 02.09.2016
comment
Это должно немного помочь: mathforum.org/kb/message.jspa?messageID= 5658016 & tstart = 0   -  person Yuri    schedule 02.09.2016
comment
Я видел оба из них, первое не помогает и в любом случае неверно. И я надеялся на более конкретную реализацию, чем вторая, но я могу пойти по этому пути, если ни одна из них не появится.   -  person holtc    schedule 02.09.2016


Ответы (1)


Решено путем взвешивания входного вектора и последующей нормализации, спасибо за комментарии.

person holtc    schedule 02.09.2016