皮尔逊相关度系数原理,以及java实现
来源:互联网 发布:网络专线 编辑:程序博客网 时间:2024/04/28 16:08
转载请标明出处:http://blog.csdn.net/u010670689/article/details/41895105
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实现:使用公式二实现的
package youling.studio.pearson;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.apache.log4j.Logger;/** * * */ public class Similarity { static Logger logger = Logger.getLogger(Similarity.class.getName()); Map<String, Double> rating_map = new HashMap<String, Double>(); List<Double> rating_map_list = new ArrayList<Double>(); /** * @param args */ public static void main(String[] args) { Similarity similarity1 = new Similarity(); similarity1.rating_map_list.add(20d); similarity1.rating_map_list.add(7d); similarity1.rating_map_list.add(26d); Similarity similarity2 = new Similarity(); similarity2.rating_map_list.add(7d); similarity2.rating_map_list.add(3d); similarity2.rating_map_list.add(6d); logger.info("" + similarity1.getsimilarity_bydim(similarity2)); //0.8多,属于高度相关 Similarity similarity3 = new Similarity(); similarity3.rating_map_list.add(12d); similarity3.rating_map_list.add(4d); similarity3.rating_map_list.add(8d); Similarity similarity4 = new Similarity(); similarity4.rating_map_list.add(3d); similarity4.rating_map_list.add(1d); similarity4.rating_map_list.add(2d); logger.info("" + similarity3.getsimilarity_bydim(similarity4)); //结果是1.0成比例其实就是前面和后面是倍数关系 } public Double getsimilarity_bydim(Similarity u) { if(this.rating_map_list.size()!=u.rating_map_list.size()){ return null; } double sim = 0d; //最后的皮尔逊相关度系数 double common_items_len = this.rating_map_list.size(); //操作数的个数 double this_sum = 0d; //第一个相关数的和 double u_sum = 0d; //第二个相关数的和 double this_sum_sq = 0d; //第一个相关数的平方和 double u_sum_sq = 0d; //第二个相关数的平方和 double p_sum = 0d; //两个相关数乘积的和 for(int i = 0;i<this.rating_map_list.size();i++){ double this_grade = this.rating_map_list.get(i); double u_grade = u.rating_map_list.get(i); //评分求和 //平方和 //乘积和 this_sum += this_grade; u_sum += u_grade; this_sum_sq += Math.pow(this_grade, 2); u_sum_sq += Math.pow(u_grade, 2); p_sum += this_grade*u_grade; } logger.info("common_items_len:"+common_items_len); logger.info("p_sum:"+p_sum); logger.info("this_sum:"+this_sum); logger.info("u_sum:"+u_sum); double num = common_items_len * p_sum - this_sum * u_sum; 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))); logger.info("" + num + ":" + den); sim = (den == 0) ? 1 : num / den; return sim; } }
3.适用范围:
当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:
(1)、两个变量之间是线性关系,都是连续数据。
(2)、两个变量的总体是正态分布,或接近正态的单峰分布。
(3)、两个变量的观测值是成对的,每对观测值之间相互独立。
---
0 0
- 皮尔逊相关度系数原理,以及java实现
- 皮尔逊相关度系数原理,以及java实现
- 皮尔逊相关度系数原理,以及java实现
- 欧几里德距离&皮尔逊相关度系数
- 距离有多远?欧几里德距离&皮尔逊相关度系数
- 距离有多远?欧几里德距离&皮尔逊相关度系数
- HTTPS原理以及Java实现
- 回归中的相关度和决定系数
- java实现链表以及相关操作
- Unity Shader:实现菲涅尔+色散效果以及相关原理解析
- Unity Shader:实现菲涅尔+色散效果以及相关原理解析
- 红黑树原理解析以及Java实现
- SSL工作原理介绍以及java实现
- K-means算法原理以及java实现
- 简述java常用集合以及实现原理
- java 集合类 原理以及实现--ArrayList
- java线程总结--synchronized关键字,原理以及相关的锁
- 利用皮尔逊相关度系数构建一个简单的推荐系统
- android 已省内存方式把图片加载到内存
- android三档自定义滑动开关,禁止点击功能的实现,用默认的seekbar组件实现
- ubuntu 64位环境
- VC++操作EXCEL内存泄露问题
- Eclipse_如何设置注释模板
- 皮尔逊相关度系数原理,以及java实现
- C语言标准发展历
- 程序发布为应用程序
- 应聘互联网公司的简历应该是怎么样的?
- "ORA-00942: 表或视图不存在 "的原因和解决方法
- Cocos2d-x + Android + Eclipse + Windows 8
- 使用echarts简单制作中国地图
- Android4.0.3 IP,子网掩码,网关修改
- Reporting Service 报表入门