社会化推荐系统浅析-皮尔逊相关系数的java实现
2012-03-13 22:16
435 查看
本文由larrylgq编写,转载请注明出处:http://blog.csdn.net/larrylgq/article/details/7395261
作者:吕桂强
邮箱:larry.lv.word@gmail.com
相关系数的值介于–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为高度线性相关。
上代码:
作者:吕桂强
邮箱:larry.lv.word@gmail.com
相关系数的值介于–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为高度线性相关。
上代码:
package com.Social.cbra.praron2; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.logging.Logger; /** * * @author larry * */ public class Similarity { static Logger logger = Logger.getLogger(Similarity.class.getName()); Map<String, Double> rating_map = new HashMap<String, Double>(); /** * @param args */ public static void main(String[] args) { Similarity similarity1 = new Similarity(); similarity1.rating_map.put("1", 434d); similarity1.rating_map.put("2", 7d); similarity1.rating_map.put("3", 23d); Similarity similarity2 = new Similarity(); similarity2.rating_map.put("1", 6d); similarity2.rating_map.put("2", 2d); similarity2.rating_map.put("3", 6d); logger.info("" + similarity1.getsimilarity_bydim(similarity2)); } public double getsimilarity_bydim(Similarity u) { double sim = 0d; double common_items_len = 0; double this_sum = 0d; double u_sum = 0d; double this_sum_sq = 0d; double u_sum_sq = 0d; double p_sum = 0d; Iterator<String> rating_map_iterator = this.rating_map.keySet().iterator(); while(rating_map_iterator.hasNext()){ String rating_map_iterator_key = rating_map_iterator.next(); Iterator<String> u_rating_map_iterator = u.rating_map.keySet().iterator(); while(u_rating_map_iterator.hasNext()){ String u_rating_map_iterator_key = u_rating_map_iterator.next(); if(rating_map_iterator_key.equals(u_rating_map_iterator_key)){ double this_grade = this.rating_map.get(rating_map_iterator_key); double u_grade = u.rating_map.get(u_rating_map_iterator_key); //评分求和 //平方和 //乘积和 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; common_items_len++; } } } //如果等于零则无相同条目,返回sim=0即可 if(common_items_len > 0){ 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; } //如果等于零则无相同条目,返回sim=0即可 return sim; } }
相关文章推荐
- 社会化推荐系统浅析-欧几里德距离的java实现
- 社会化搜索与推荐浅析-朴素贝叶斯+laplace平滑文本分类器推导过程及java版实现
- 用Java 实现简单的推荐系统
- LibRec:一个实现推荐系统的Java库包
- 推荐系统之余弦相似度及其Java实现
- 社会化推荐系统浅析-概述
- 两步实现Log4j记录java控制台输出的系统所有异常信息和自定义记录日志---->非常实用,强烈推荐阅读
- 新浪明星日志推荐系统——java实现(3)
- Extmail:实现基于虚拟账号的web邮件系统 推荐
- java swing实现图书管理系统之Java swing图书管理系统源码与实现
- 关于java通信的一个简单聊天系统的实现
- RBM算法模型应用在推荐系统 Python代码实现
- java实现跨系统接口调用简单
- 系统性能监控系列1:使用JAVA动态代理实现非侵入式的性能测量方法
- 使用Neo4j和简单分词算法实现菜品推荐系统
- Java运用JNI调用dll实现屏蔽系统热键
- 学生选课系统java实现
- javaweb+SSH实现简单的权限管理系统
- andy学java系列之J2ME的移动支付系统的客户端的实现