社會化推薦系統淺析-皮爾遜相關係數的java實現

來源:互聯網
上載者:User

本文由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為高度線性相關。

上代碼:

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;}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.