日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發(fā)布時間:2023/12/4 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java转python推荐算法_java和python实现一个加权SlopeOne推荐算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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 //兩個項目的用戶數(shù)

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 //排序,這里還可以使用優(yōu)先隊列返回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 }

總結

以上是生活随笔為你收集整理的java转python推荐算法_java和python实现一个加权SlopeOne推荐算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。