java实现皮尔逊相关系数

皮尔逊相关系数的定义为两个变量之间的协方差和标准差的商

公式如下:


上式定义了总体相关系数,常用希腊小写字母

   
作为代表符号。估算 样本 的协方差和标准差,可得到 皮尔逊相关系数 ,常用英文小写字母 
 
代表:

化简为单流程计算公式为:


使用java实现如下:

private double caculatePearson(Map mapX, Map mapY) {
        // (sum(X*Y) - (sum(X)*sum(Y)/N))/sqr((sum(pow(X))-(pow(sum(X))/N)) * ((sum(pow(Y))-(pow(sum(Y))/N))))
        double sumXY = 0d;
        double sumX = 0d;
        double sumY = 0d;
        double sumPowX = 0d;
        double sumPowY = 0d;
        Set setItem = new HashSet<>();
        for (Map.Entry entry : mapX.entrySet()) {
            setItem.add(entry.getKey());
        }
        for (Map.Entry entry : mapY.entrySet()) {
            setItem.add(entry.getKey());
        }
        for (BigInteger bookId : setItem) {
            Double x = mapX.get(bookId);
            if (x == null) {
                x = 0d;
            }
            Double y = mapY.get(bookId);
            if (y == null) {
                y = 0d;
            }
            sumXY += x * y;
            sumX += x;
            sumY += y;
            sumPowX += Math.pow(x, 2);
            sumPowY += Math.pow(y, 2);
        }
        int n = setItem.size();
        double pearson = (sumXY - sumX * sumY / n) / Math.sqrt((sumPowX - Math.pow(sumX, 2) / n) * (sumPowY - Math.pow(sumY, 2) / n));
        return pearson;
    }



你可能感兴趣的:(数据挖掘)