1 importjava.util.HashMap;2 importjava.util.Map;3 importjava.util.List;4 importjava.util.ArrayList;5 importjava.util.Comparator;6 importjava.util.Collections;7

8 /**

9 * Created by on 2016/12/8.ShiYan10 * 一.计算所有物品对的偏差11 * 二.利用偏差进行预测12 */

13 public classSlopeOne {14 Map> frequency=null;15 Map> deviation=null;16 Map> user_rating=null;17

18 public SlopeOne( Map>user_rating){19 frequency=new HashMap>();20 deviation=new HashMap>();21 this.user_rating=user_rating;22 }23

24 /**

25 * 所有有item间的评分偏差26 */

27 public voidcomputeDeviation(){28 for(Map.Entry>ratingsEntry:user_rating.entrySet()){29 for(Map.EntryratingEntry:ratingsEntry.getValue().entrySet()){30 String item=ratingEntry.getKey();31 int rating=ratingEntry.getValue();32 Map itemFrequency=null;33 if(!frequency.containsKey(item)){34 itemFrequency=new HashMap();35 frequency.put(item,itemFrequency);36 }else{37 itemFrequency=frequency.get(item);38 }39

40 Map itemDeviation=null;41 if(!deviation.containsKey(item)){42 itemDeviation=new HashMap();43 deviation.put(item,itemDeviation);44 }else{45 itemDeviation=deviation.get(item);46 }47

48 for(Map.EntryratingEntry2:ratingsEntry.getValue().entrySet()){49 String item2=ratingEntry2.getKey();50 int rating2=ratingEntry2.getValue();51 if(!item.equals(item2)){52 //两个项目的用户数

53 itemFrequency.put(item2,itemFrequency.containsKey(item2)?itemFrequency.get(item2)+1:0);54 //两个项目的评分偏差,累加

55 itemDeviation.put(item2,itemDeviation.containsKey(item2)?itemDeviation.get(item2)+(rating-rating2):0.0);56 }57 }58 }59 }60

61 for(Map.Entry>itemsDeviation:deviation.entrySet()){62 String item=itemsDeviation.getKey();63 Map itemDev=itemsDeviation.getValue();64 Map itemFre=frequency.get(item);65 for(String itemName:itemDev.keySet()){66 itemDev.put(itemName,itemDev.get(itemName)/itemFre.get(itemName));67 }68 }69 }70

71 /**

72 * 评分预测73 *@paramuserRating 目标用户的评分74 *@paramk 返回前k个75 *@return

76 */

77 public List> predictRating(Map userRating,intk){78 Map recommendations=new HashMap();79 Map frequencies=new HashMap();80 for(Map.EntryuserEntry:userRating.entrySet()){81 String userItem=userEntry.getKey();82 double rating=userEntry.getValue();83 for(Map.Entry>deviationEntry:deviation.entrySet()){84 String item=deviationEntry.getKey();85 Map itemDeviation=deviationEntry.getValue();86 Map itemFrequency=frequency.get(item);87 if(!userRating.containsKey(item) &&itemDeviation.containsKey(userItem)){88 int fre=itemFrequency.get(userItem);89 if(!recommendations.containsKey(item))90 recommendations.put(item,0.0);91 if(!frequencies.containsKey(item))92 frequencies.put(item,0);93 //分子部分

94 recommendations.put(item,recommendations.get(item)+(itemDeviation.get(userItem)+rating)*fre);95 //分母部分

96 frequencies.put(item,frequencies.get(item)+fre);97 }98 }99 }100 for(Map.EntryrecoEntry:recommendations.entrySet()){101 String key=recoEntry.getKey();102 double value=recoEntry.getValue()/frequencies.get(key);103 recommendations.put(key,value);104 }105 //排序,这里还可以使用优先队列返回top_k

106 List> list_map=new ArrayList>(recommendations.entrySet());107 Collections.sort(list_map,new Comparator>(){108 @Override109 public int compare(Map.Entry o1, Map.Entryo2) {110 if(o2.getValue()>o1.getValue())111 return 1;112 else if(o2.getValue()

115 return 0;116 }117 }118 );119 List> top_k=new ArrayList>();120 if(list_map.size()

127 public static voidmain(String[] args){128 Map> userRatings=new HashMap>();129 Map xiMingRating=new HashMap();130 xiMingRating.put("张学友",4);131 xiMingRating.put("周杰伦",3);132 xiMingRating.put("刘德华",4);133 Map xiHaiRating=new HashMap();134 xiHaiRating.put("张学友",5);135 xiHaiRating.put("周杰伦",2);136 Map liMeiRating=new HashMap();137 liMeiRating.put("周杰伦",3);138 liMeiRating.put( "刘德华",4);139 Map liLeiRating=new HashMap();140 liLeiRating.put("张学友",5);141 liLeiRating.put("刘德华",3);142 userRatings.put("xiMing",xiMingRating);143 userRatings.put("xiHai",xiHaiRating);144 userRatings.put("liMei", liMeiRating);145 userRatings.put("liLei",liLeiRating);146

147 SlopeOne slopOne=newSlopeOne(userRatings);148 slopOne.computeDeviation();149 List> top_k=slopOne.predictRating(userRatings.get("liLei"),5);150 for(Map.Entryitem:top_k){151 System.out.println(item.getKey()+" "+item.getValue());152 }153 }154 }

slope one 推荐算法python 代码_java和python实现一个加权SlopeOne推荐算法相关推荐

  1. java转python推荐算法_java和python实现一个加权SlopeOne推荐算法

    1 importjava.util.HashMap;2 importjava.util.Map;3 importjava.util.List;4 importjava.util.ArrayList;5 ...

  2. 手眼标定算法Tsai-Lenz代码实现(Python、C++、Matlab)

    你好,我是小智. 上一节介绍了手眼标定算法Tsai的原理,这一节介绍算法的代码实现,分别有Python.C++.Matlab版本的算法实现方式. 该算法适用于将相机装在手抓上和将相机装在外部两种情况 ...

  3. pythonencoding etf-8_etf iopv python 代码30个Python常用小技巧

    1.原地交换两个数字x, y =10, 20 print(x, y) y, x = x, y print(x, y) 10 20 20 10 2.链状比较操作符n = 10 print(1 print ...

  4. 用Python代码自己写Python代码,竟如此简单

    用Python代码自己写Python代码,竟如此简单 Python作为一门功能强大且使用灵活的编程语言,可以应用于各种领域,具有"无所不能"的特质. Python甚至可以代替人,自 ...

  5. python代码:闭包closure的一个例子

    python代码:闭包closure的一个例子 #!/usr/bin/python # -*- coding: UTF-8 -*- """ @author: @file: ...

  6. nms python代码_?标检测中的?极?值抑制算法(nms):python代码解析

    ⾮极⼤值抑制(Non-Maximum Suppression)原理 ⾮极⼤值抑制,顾名思义,找出极⼤值,抑制⾮极⼤值.这种思路和算法在各个领域中应⽤⼴泛,⽐如边缘检测算法canny算⼦中就使⽤了该⽅法 ...

  7. knn算法python代码_在python中使用KNN算法处理缺失的数据

    处理缺失的数据并不是一件容易的事. 方法的范围从简单的均值插补和观察值的完全删除到像MICE这样的更高级的技术. 解决问题的挑战性是选择使用哪种方法. 今天,我们将探索一种简单但高效的填补缺失数据的方 ...

  8. python代码库-哪些 Python 库让你相见恨晚?

    Awesome Python 中文版网站?jobbole.github.io Awesome Python中文版来啦! 本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载! 英文 ...

  9. python代码基础题-python第一部分基础题1-80题

    各位Python的第一部分1-80道基础题已经整理好了,希望面试的时候能用的上. 1.为什么学习Python? Python是目前市面上,我个人认为是最简洁.最优雅.最有前途.最全能的编程语言,没有之 ...

最新文章

  1. 【NeurIPS2019】Yoshua Bengio报告:深度学习系统从1代到2代
  2. python测试rabbitmq的消息收发
  3. 可自设定长度,根据各种标点符号去分隔字符串
  4. SAP MM 移动类型-入门篇
  5. Ehcache BigMemory: 摆脱GC困扰(转)
  6. go语言调用c 的头文件 so,Golang生成共享库(shared library)以及Golang生成C可调用的动态库.so和静态库.a...
  7. Docker:单机编排工具docker-compose [十二]
  8. Shutter - 带有众多功能的屏幕截图工具
  9. oracle 表改表空间,Oracle批量修改用户表table的表空间
  10. Git(11)-- Git 别名(alias)
  11. 一篇真正教会你开发移动端页面的文章(二)
  12. 《丁丁历险记系列之委托》改编自《.NET委托:一个C#睡前故事》
  13. 用NBSI进行SQL注入***分析及安全解决方案
  14. MySQL报错: Incorrect string value: '\xE5\x85\xA8\xE7\x90\x83...' for column 'cname' at row 1
  15. 人工智能第二章知识表示
  16. Delphi7学习记录-demo实例
  17. python做ui界面_从零开始创建UI
  18. Bag标签之轻开B2C电子商务网站登录校验实例
  19. 田忌赛马 贪心 注意细节
  20. 青软再助力!廊坊企业数字化转型专题培训会圆满完成

热门文章

  1. 雷电2接口_地表最强?代替电脑的所有接口,雷电3或有望一统接口江湖
  2. Mysql的sql注入_MySQL SQL注入
  3. MySQL约束不起作用怎么解决_MySQL中的CHECK约束不起作用
  4. map评价吗 voc数据集可以用coco_【庖丁解牛】从零实现RetinaNet(九):使用COCO预训练权重在VOC上训练RetinaNet...
  5. html语言难不难学,Web前端开发难学吗?
  6. linux tf命令,Linux 基础命令
  7. 错过618?暑假阅读季不要错过啦!
  8. 为什么阿里如此钟爱Flink?
  9. 每日一皮:在调试时,将断点设置在错误的位置...
  10. 不想 CRUD 干到老,就来看看这篇 OOM 排查的实战案例!