Mahout实现基于性别的IDRescorer
来源:互联网 发布:哥们傲剑数据 编辑:程序博客网 时间:2024/06/02 16:51
<span style="font-size:18px;">/*** * @author YangXin * @info 基于性别的IDRscorer * 对于在乎性别的用户,IDRscorer能够对物品或用户档案进行过滤。 * 首先,可以先通过检查已经评价过的档案的性别,来猜测该用户所偏好 * 的性别。然后,就可以过滤与之性别相反的档案。 */package unitFive;import java.io.File;import java.io.IOException;import org.apache.mahout.cf.taste.common.TasteException;import org.apache.mahout.cf.taste.impl.common.FastIDSet;import org.apache.mahout.cf.taste.model.DataModel;import org.apache.mahout.cf.taste.model.PreferenceArray;import org.apache.mahout.cf.taste.recommender.IDRescorer;import org.apache.mahout.common.iterator.FileLineIterable;public class GenderRescorer implements IDRescorer {/*** * 缓存更对对男性评价的用户 */private final FastIDSet men;private final FastIDSet women;private final FastIDSet usersRateMoreMen;private final FastIDSet usersRateLessMen;private final boolean filterMen;/** * 构造函数 */public GenderRescorer(FastIDSet men, FastIDSet women, FastIDSet usersRateMoreMen, FastIDSet usersRateLessMen, long userID, DataModel model) throws TasteException{// TODO Auto-generated constructor stubthis.men = men;this.women = women;this.usersRateMoreMen = usersRateMoreMen;this.usersRateLessMen = usersRateLessMen;this.filterMen = ratesMoreMen(userID, model);}/** * 解析gender.dat并创建两个档案ID * */public static FastIDSet[] parseMenWomen(File genderFile) throws IOException{FastIDSet men = new FastIDSet(50000);FastIDSet women = new FastIDSet(50000);for(String line : new FileLineIterable(genderFile)){int comma = line.indexOf(',');char gender = line.charAt(comma + 1);if(gender == 'U'){continue;}long profileID = Long.parseLong(line.substring(0, comma));if(gender == 'M'){men.add(profileID);}else{women.add(profileID);}}men.rehash(); //刷新women.rehash(); //刷新return new FastIDSet[]{men, women};}public boolean ratesMoreMen(long userID, DataModel model) throws TasteException{if(usersRateMoreMen.contains(userID)){return true;}if(usersRateLessMen.contains(userID)){return false;}PreferenceArray prefs = model.getPreferencesFromUser(userID);int menCount = 0;int womenCount = 0;for(int i = 0; i < prefs.length(); i++){long profileID = prefs.get(i).getItemID();if(men.contains(profileID)){menCount++;}else if(women.contains(profileID)){womenCount++;}}boolean ratesMoreMen = menCount > womenCount; //对男性评分的用户可能更喜欢男性if(ratesMoreMen){usersRateMoreMen.add(userID);}else{usersRateLessMen.add(userID);}return ratesMoreMen;}@Overridepublic double rescore(long profileID, double originalScore) {// TODO Auto-generated method stubreturn isFiltered(profileID) ? Double.NaN : originalScore; //将被排除的值赋值为NaN}@Overridepublic boolean isFiltered(long profileID) {// TODO Auto-generated method stubreturn filterMen ? men.contains(profileID) : women.contains(profileID);}}</span>
0 0
- Mahout实现基于性别的IDRescorer
- Mahout实现一个基于性别的物品相似度量的方法GenderItemSimilarity
- mahout实现基于用户的Mahout推荐程序
- 基于Mahout的电影推荐系统实现
- 基于mahout的相似度算法的实现
- 基于 Apache Mahout 实现高效的协同过滤推荐
- 基于hadoop下的mahout推荐系统实现
- Mahout实现基于用户的协同过滤算法
- **基于 Apache Mahout 实现高效的协同过滤推荐电影**
- 基于hadoop下的mahout推荐系统实现
- 基于CNN的性别、年龄识别及Demo实现
- FuzzyKmeans的Mahout实现
- mahout入门指南之基于mahout的itembased算法
- mahout学习(二)--基于Mahout的电影推荐系统
- mahout过滤推荐结果 Recommender.recommend(long userID, int howMany, IDRescorer rescorer)
- 【甘道夫】通过Mahout构建推荐系统--通过IDRescorer扩展评分规则
- 【甘道夫】通过Mahout构建推荐系统--通过IDRescorer扩展评分规则
- Apache Mahout的Taste基于Hadoop实现协同过滤推荐引擎的代码分析
- iOS打包导出时出现Missing iOS Distribution signing identity问题
- 四元数计算
- Divide and Conquer
- 深入分析ConcurrentHashMap
- 巧用 div 层次 和 巧用百分比
- Mahout实现基于性别的IDRescorer
- php laravel5.1配置redis
- Storm本地模式环境问题
- 7zip的用法
- Java并发编程:并发容器之ConcurrentHashMap
- SQL 查询横表变竖表
- 博客暂时转移
- BackTrack 5 ARM For N900
- 华为8年理工女硕离职感言