

プログラミング初心者です。

コサイン類似度を勉強している際、入力したデータが明らかに違うのにも関わらず、結果値が高い値を示します。

AとBの比較では0.89という妥当な値が出ますが、AとDはデータの内容が明らかに違うにも関わらず0.9という結果が出ます。

これはなぜなのでしょうか?

言語はjavascriptです。

[code]

    let A = [20,60,80];
    let B = [20,80,40];
    let C = [70,20,70];
    let D = [1,1,1];
    
    cos(A,B);
    cos(A,C);
    cos(A,D);
    
    function cos(val1,val2) {
        //初期化
        let A1 = 0;
        let B1 = 0;
        let ab1 = 0;
        let ab2 = 0;
        let ab3 = 0;
        let cosθ = 0;
        
        //データ入力
        A1 = val1;
        B1 = val2;
        
        //事前計算
        for (let i = 0; i < A1.length; i++) {
            ab1 += A1[i] * B1[i];
            ab2 += A1[i] * A1[i];
            ab3 += B1[i] * B1[i];
        }
    
        //コサイン類似度のアルゴリズム
        cosθ =  ab1 / (Math.sqrt(ab2)*Math.sqrt(ab3));
        
        //計算結果
        console.log(cosθ);
    }
    
    
[/code]

cos(A,B); → 0.8987170342729172  
cos(A,C); → 0.7961540283151327  
cos(A,D); → 0.9058216273156766


CC BY-SA 4.0
2022-01-10T09:07:03.193
85603
2022-01-12T03:47:37.813
50821
question
javascript アルゴリズム
コサイン類似度結果が思った通りの結果と違う理由はなぜでしょうか?


コサイン類似度=ベクトルの **向き** の似ている度合い、だそうなので、大きさをそろえると

[code]

    A = [1,3,4];
    B = [1,4,2];
    
    D = [1,1,1]; [2,2,2]でも [4,4,4]でも
    
[/code]

となり、A,BとA,Dで明らかに違う数値になるはず、にはならないと思います。


CC BY-SA 4.0
2022-01-12T03:47:37.813
85634
2022-01-12T03:47:37.813
5793
85603
answer