皮尔逊相关度系数原理,以及java实现

1.原理:



以上列出的四个公式等价,其中E是数学期望,cov表示协方差,N表示变量取值的个数。

数学期望,协方差解释文章链接: http://blog.csdn.net/u010670689/article/details/41896399


相关系数的值介于–1与+1之间,即–1≤r≤+1。其性质如下:

  • 当r>0时,表示两变量正相关,r<0时,两变量为负相关
  • 当|r|=1时,表示两变量为完全线性相关,即为函数关系。
  • 当r=0时,表示两变量间无线性相关关系。
  • 当0<|r|<1时,表示两变量存在一定程度的线性相关。且|r|越接近1,两变量间线性关系越密切;|r|越接近于0,表示两变量的线性相关越弱。
  • 一般可按三级划分:|r|<0.4为低度线性相关;0.4≤|r|<0.7为显著性相关;0.7≤|r|<1为高度线性相关。


2.java实现:使用公式二实现的

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package youling.studio.pearson;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.Iterator;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. import org.apache.log4j.Logger;  
  10.   
  11. /**  
  12. *   
  13. *   
  14. */   
  15. public class Similarity {   
  16.    static Logger logger = Logger.getLogger(Similarity.class.getName());   
  17.    Map<String, Double> rating_map = new HashMap<String, Double>();   
  18.    List<Double> rating_map_list = new ArrayList<Double>();   
  19.    
  20.    /**  
  21.     * @param args  
  22.     */  
  23.    public static void main(String[] args) {   
  24.        Similarity similarity1 = new Similarity();   
  25.        similarity1.rating_map_list.add(20d);   
  26.        similarity1.rating_map_list.add(7d);   
  27.        similarity1.rating_map_list.add(26d);   
  28.        Similarity similarity2 = new Similarity();   
  29.        similarity2.rating_map_list.add(7d);   
  30.        similarity2.rating_map_list.add(3d);   
  31.        similarity2.rating_map_list.add(6d);   
  32.        logger.info("" + similarity1.getsimilarity_bydim(similarity2)); //0.8多,属于高度相关  
  33.          
  34.          
  35.        Similarity similarity3 = new Similarity();   
  36.        similarity3.rating_map_list.add(12d);   
  37.        similarity3.rating_map_list.add(4d);   
  38.        similarity3.rating_map_list.add(8d);   
  39.        Similarity similarity4 = new Similarity();   
  40.        similarity4.rating_map_list.add(3d);   
  41.        similarity4.rating_map_list.add(1d);   
  42.        similarity4.rating_map_list.add(2d);   
  43.        logger.info("" + similarity3.getsimilarity_bydim(similarity4)); //结果是1.0成比例其实就是前面和后面是倍数关系  
  44.          
  45.   }   
  46.      
  47.    
  48.    public Double getsimilarity_bydim(Similarity u) {   
  49.        if(this.rating_map_list.size()!=u.rating_map_list.size()){  
  50.        return null;  
  51.        }  
  52.        double sim = 0d; //最后的皮尔逊相关度系数  
  53.        double common_items_len = this.rating_map_list.size(); //操作数的个数  
  54.        double this_sum = 0d; //第一个相关数的和  
  55.        double u_sum = 0d; //第二个相关数的和  
  56.        double this_sum_sq = 0d; //第一个相关数的平方和  
  57.        double u_sum_sq = 0d; //第二个相关数的平方和  
  58.        double p_sum = 0d; //两个相关数乘积的和  
  59.          
  60.        for(int i = 0;i<this.rating_map_list.size();i++){  
  61.        double this_grade = this.rating_map_list.get(i);  
  62.        double u_grade = u.rating_map_list.get(i);  
  63.        //评分求和                     //平方和                     //乘积和  
  64.        this_sum += this_grade;  
  65.        u_sum += u_grade;  
  66.        this_sum_sq += Math.pow(this_grade, 2);  
  67.        u_sum_sq += Math.pow(u_grade, 2);  
  68.        p_sum += this_grade*u_grade;  
  69.        }  
  70.          
  71.        logger.info("common_items_len:"+common_items_len);   
  72.        logger.info("p_sum:"+p_sum);   
  73.        logger.info("this_sum:"+this_sum);   
  74.        logger.info("u_sum:"+u_sum);   
  75.        double num = common_items_len * p_sum - this_sum * u_sum;   
  76.        double den = Math.sqrt((common_items_len * this_sum_sq - Math.pow(this_sum, 2)) * (common_items_len * u_sum_sq - Math.pow(u_sum, 2)));   
  77.        logger.info("" + num + ":" + den);   
  78.        sim = (den == 0) ? 1 : num / den;   
  79.          
  80.        return sim;  
  81.    }   
  82.      
  83. }   
  84.    


3.适用范围:

当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:

(1)、两个变量之间是线性关系,都是连续数据。

(2)、两个变量的总体是正态分布,或接近正态的单峰分布。

(3)、两个变量的观测值是成对的,每对观测值之间相互独立。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值