java 皮尔逊相关系数_皮尔逊相关系数的java实现

该博客介绍了如何使用Java计算皮尔逊相关系数。皮尔逊相关系数用于衡量两个变量之间的线性相关性,其值介于-1到1之间。文章提供了具体的Java代码示例,展示了如何计算两个对象在不同条目上的评分相似度。
摘要由CSDN通过智能技术生成

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

当r>0时,表示两变量正相关,r<0时,两变量为负相关。

当|r|=1时,表示两变量为完全线性相关,即为函数关系。

当r=0时,表示两变量间无线性相关关系。

当0

且|r|越接近1,两变量间线性关系越密切;

|r|越接近于0,表示两变量的线性相关越弱。

一般可按三级划分:|r|<0.4为低度线性相关;

0.4≤|r|<0.7为显著性相关;0.7≤|r|<1为高度线性相关。

1. [代码][Java]代码

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());

Maprating_map = new HashMap();

/**

* @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;

Iteratorrating_map_iterator = this.rating_map.keySet().iterator();

while(rating_map_iterator.hasNext()){http://www.huiyi8.com/flashjc/

String rating_map_iterator_key = rating_map_iterator.next();

Iteratoru_rating_map_iterator = u.rating_map.keySet().iterator();

while(u_rating_map_iterator.hasNext()){flash教程

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;

}

}

阅读(1931) | 评论(0) | 转发(0) |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值