Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何:数组中余弦相似性的平方根~java~_Java_Arrays_Nan_Cosine Similarity - Fatal编程技术网

如何:数组中余弦相似性的平方根~java~

如何:数组中余弦相似性的平方根~java~,java,arrays,nan,cosine-similarity,Java,Arrays,Nan,Cosine Similarity,我的问题是,我正在创建一个图书推荐系统,当我尝试平方根来确定相似度时。我不相信每个数组的所有内容都是平方根 用户会收到二十本书的提示,然后根据他们对这本书的喜爱程度输入“1-5”和“-1”(如果他们没有读过这本书) 我的一些分数输出是NaN。因此,我假设它只是在数组的第一个元素之后停止 我尝试过重新排列循环,我个人认为这是循环以及如何访问数组的问题 这是 CPU等级文件 -1 1 1 4 1 3 3 1 2 3 4 -1 4 1 2 4 5 4 2 3 3 -1 2 3 -1 2 5 -1 3

我的问题是,我正在创建一个图书推荐系统,当我尝试平方根来确定相似度时。我不相信每个数组的所有内容都是平方根

用户会收到二十本书的提示,然后根据他们对这本书的喜爱程度输入“1-5”和“-1”(如果他们没有读过这本书)

我的一些分数输出是NaN。因此,我假设它只是在数组的第一个元素之后停止

我尝试过重新排列循环,我个人认为这是循环以及如何访问数组的问题

这是 CPU等级文件

-1 1 1 4 1 3 3 1 2 3 4 -1 4 1 2 4 5 4 2 3
3 -1 2 3 -1 2 5 -1 3 3 5 2 2 1 2 3 5 3 4 2
-1 1 -1 4 1 3 5 2 1 5 3 -1 5 2 1 3 4 5 3 2
-1 -1 3 2 -1 5 5 2 2 4 4 2 3 2 -1 3 4 4 3 1
2 1 1 5 2 2 4 2 3 4 3 -1 5 2 2 5 3 5 2 1
3 -1 3 4 -1 2 5 -1 -1 4 3 -1 3 -1 2 5 5 5 4 2
4 -1 4 2 3 -1 1 3 4 -1 1 4 4 4 -1 2 -1 1 4 4
4 3 3 3 -1 2 2 4 3 -1 2 4 3 4 2 -1 -1 2 2 3
3 -1 3 -1 3 4 -1 5 5 -1 -1 -1 1 -1 -1 1 1 2 -1 5
3 -1 3 4 3 4 -1 5 5 2 3 3 4 1 1 -1 -1 -1 -1 4
4 -1 4 4 1 3 -1 5 4 -1 1 3 4 1 -1 1 -1 1 -1 5
5 -1 3 1 4 3 -1 5 4 1 3 2 1 -1 4 2 1 -1 2 4
3 -1 5 1 4 4 2 5 5 1 2 3 1 1 -1 1 -1 1 -1 5
4 1 5 4 3 -1 1 3 4 -1 -1 3 3 -1 1 1 2 -1 3 5
-1 1 1 3 -1 3 1 3 -1 -1 3 -1 5 2 2 1 4 -1 5 -1
3 -1 2 3 1 5 4 3 3 -1 5 -1 5 2 -1 4 4 3 3 3
1 1 1 3 2 4 1 -1 -1 -1 5 -1 3 -1 -1 1 -1 2 5 2
-1 2 3 5 -1 4 3 1 1 3 3 -1 4 -1 -1 4 3 2 5 1
-1 1 3 3 -1 3 3 1 -1 -1 3 -1 5 -1 -1 3 1 2 4 -1
3 -1 2 4 1 4 3 -1 2 3 4 1 3 -1 2 -1 4 3 5 -1
-1 1 3 5 -1 4 2 1 -1 3 3 2 3 2 -1 3 1 -1 3 -1
3 2 2 3 -1 5 -1 -1 2 3 4 -1 4 1 -1 -1 -1 -1 4 2
-1 3 -1 -1 4 -1 2 -1 2 2 2 5 -1 3 4 -1 -1 2 -1 2
1 4 3 -1 3 2 1 -1 -1 -1 1 3 1 3 3 1 -1 -1 -1 3
4 3 3 -1 4 2 -1 4 -1 -1 2 4 -1 3 4 2 -1 -1 -1 4
-1 5 1 -1 4 1 -1 3 2 2 -1 4 1 3 3 1 -1 -1 -1 3
-1 4 2 1 5 -1 -1 2 1 1 -1 5 -1 5 4 1 2 2 -1 1
2 5 2 -1 3 -1 -1 1 -1 2 -1 4 2 4 3 -1 2 1 -1 -1
2 5 1 1 4 -1 2 1 -1 -1 2 4 -1 3 4 2 -1 -1 -1 4
求平方根的方法

        public static double sqrtSquares(double []A) {

            //check A for -1
        double sum = 0;
                for(int i = 0; i<A.length; i++) {
                    if(A[i] < 0 ) {
                        A[i] = 0;
                    }

                    A[i] = Math.sqrt(A[i]);

                    //calculate the running sum;
                    sum += A[i] * A[i] ;
                }
        return Math.sqrt(sum);
        }


    public static double similarity(double []A, double []B) {
        double sum = 0;
        double p1 = sqrtSquares(A);
        double p2 = sqrtSquares(B);

        for (int i=0; i<A.length; i++) {
            if (A[i]> 0) {
                if (B[i]> 0) {
                    sum += A[i]*B[i];
                }
            }

        }
    return sum/(p1*p2);
    }
编辑:这段代码现在可以工作了。谢谢大家的帮助。

公共静态双sqrtSquares(双[]A){
        public static double sqrtSquares(double []A) {
            double sum = 0;
            for(int i = 0; i<A.length; i++) {
                if(A[i] < 0 ) {
                    A[i] = 0;
                }
                sum += A[i]*A[i];    // calculate the running sum of squares
            }
            return Math.sqrt(sum);
        }
双和=0;
对于(int i=0;i

,根据我们的讨论和您对问题的解释,在您的代码中发现了以下问题

  • sqrtSquares()
    函数中的逻辑有缺陷。它仍然需要更正,因为您正在实现余弦相似性。提供了正确的定义。为了方便起见,我再次将其写入此处:
  • 公共静态双sqrtSquares(双[]A){
    双和=0;
    
    for(int i=0;i注释不用于扩展讨论;此对话已结束。
    SCORES [0] 0.8345932239467343
    SCORES [1] 0.8930284538287845
    SCORES [2] 0.8859571865530889
    SCORES [3] 0.8885782312086968
    SCORES [4] 0.8775173350115371
    SCORES [5] 0.9443223415026459
    SCORES [6] 0.8250453876017286
    SCORES [7] 0.8432290780758503
    SCORES [8] 0.8862288358972311
    SCORES [9] 0.7131697319344704
    SCORES [10] 0.8182594818515688
    SCORES [11] 0.8009904274635006
    SCORES [12] 0.8637068116707501
    SCORES [13] 0.8507371827482269
    SCORES [14] 0.8370334932826162
    SCORES [15] 0.775738787468209
    SCORES [16] 0.880315376993314
    SCORES [17] 0.7702419338621114
    SCORES [18] 0.841428935139835
    SCORES [19] 0.7527243233023518
    SCORES [20] 0.8474342113753683
    SCORES [21] 0.815084547094269
    SCORES [22] 0.7592956404693546
    SCORES [23] 0.7303452808509205
    SCORES [24] 0.7808981699861455
    SCORES [25] 0.7676319325573738
    SCORES [26] 0.7782147276497292
    SCORES [27] 0.7962287074180334
    SCORES [28] 0.7538710355467405
    SCORES [29] 0.7795507063811014
    
            public static double sqrtSquares(double []A) {
                double sum = 0;
                for(int i = 0; i<A.length; i++) {
                    if(A[i] < 0 ) {
                        A[i] = 0;
                    }
                    sum += A[i]*A[i];    // calculate the running sum of squares
                }
                return Math.sqrt(sum);
            }