2016-09-02 2 views
0

코사인 유사성을 사용하는 2 개의 희소 벡터 사이의 유사도를 계산하려고합니다. 잘 작동하고있어. 그러나 벡터의 각 인덱스에 가중치를 적용하는 추가 단계를 수행하고 싶습니다. 예 : 비교할 벡터가 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; 
} 
+0

가능한 가중치 유사성 계산 (0120)을 참조하십시오. – bradimus

+0

http://mathforum.org/kb/ message.jspa? messageID = 5658016 & tstart = 0 – Yuri

+0

둘 다 보았습니다. 첫 번째 메시지는 도움이되지 않으며 어쨌든 올바르지 않습니다. 그리고 두 번째보다 더 구체적인 구현을 기대했지만 표면이 보이지 않으면 그 경로로 갈 수 있습니다. – holtc

답변

0

입력 벡터를 가중시킨 다음 정규화하여 해결했습니다. 주석 덕분입니다.