博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RecommenderFilterSalaryResult
阅读量:4337 次
发布时间:2019-06-07

本文共 3589 字,大约阅读时间需要 11 分钟。

package org.andy.mymahout.recommendation.job;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import org.apache.mahout.cf.taste.common.TasteException;import org.apache.mahout.cf.taste.eval.RecommenderBuilder;import org.apache.mahout.cf.taste.impl.common.FastIDSet;import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;import org.apache.mahout.cf.taste.model.DataModel;import org.apache.mahout.cf.taste.recommender.IDRescorer;import org.apache.mahout.cf.taste.recommender.RecommendedItem;public class RecommenderFilterSalaryResult {    final static int NEIGHBORHOOD_NUM = 2;    final static int RECOMMENDER_NUM = 3;    public static void main(String[] args) throws TasteException, IOException {        String file = "datafile/job/pv.csv";        DataModel dataModel = RecommendFactory.buildDataModelNoPref(file);        RecommenderBuilder rb1 = RecommenderEvaluator.userCityBlock(dataModel);        RecommenderBuilder rb2 = RecommenderEvaluator.itemLoglikelihood(dataModel);        Map
averSalary = getAverSalary("datafile/job/job.csv", dataModel); LongPrimitiveIterator iter = dataModel.getUserIDs(); while (iter.hasNext()) { long uid = iter.nextLong(); System.out.print("userCityBlock =>"); filterSalary(uid, rb1, dataModel, averSalary); System.out.print("itemLoglikelihood=>"); filterSalary(uid, rb2, dataModel, averSalary); } } public static void filterSalary(long uid, RecommenderBuilder recommenderBuilder, DataModel dataModel, Map
averSalary) throws TasteException, IOException { Set
jobids = getSalaryJobID(uid, "datafile/job/job.csv", averSalary); IDRescorer rescorer = new JobRescorer(jobids); List
list = recommenderBuilder.buildRecommender(dataModel).recommend(uid, RECOMMENDER_NUM, rescorer); RecommendFactory.showItems(uid, list, false); } public static Set
getSalaryJobID(long uid, String file, Map
averSalary) throws IOException { BufferedReader br = new BufferedReader(new FileReader(new File(file))); Set
jobids = new HashSet
(); String s = null; while ((s = br.readLine()) != null) { String[] cols = s.split(","); double salary = Double.valueOf(cols[2]); if (salary < averSalary.get(uid)) { jobids.add(Long.parseLong(cols[0])); } } br.close(); return jobids; } // 获取每个用户的基准比较工资:aver(浏览过的工资)*0.8 public static Map
getAverSalary(String file, DataModel dataModel) throws NumberFormatException, IOException, TasteException{ Map
salaries = new HashMap
(); BufferedReader br = new BufferedReader(new FileReader(new File(file))); String s = null; while ((s = br.readLine()) != null) { String[] cols = s.split(","); salaries.put(Long.parseLong(cols[0]), Double.valueOf(cols[2])); } br.close(); Map
averSalaries = new HashMap
(); LongPrimitiveIterator iter = dataModel.getUserIDs(); while (iter.hasNext()) { long uid = iter.nextLong(); FastIDSet items = dataModel.getItemIDsFromUser(uid); LongPrimitiveIterator itemsIter = items.iterator(); double sum = 0; int count = 0; double aver = 0.0; while (itemsIter.hasNext()) { long item = itemsIter.nextLong(); double salary = salaries.get(item); sum += salary; count ++; } if(count > 0) aver = 0.8*sum/count; averSalaries.put(uid, aver); } return averSalaries; }}

转载于:https://www.cnblogs.com/jamesf/p/4751592.html

你可能感兴趣的文章
文档工具GitBook使用
查看>>
两个链表的第一个公共节点
查看>>
知道这20个正则表达式,能让你少写1,000行代码
查看>>
MariaDB 主从同步与热备(14)
查看>>
推荐的 CSS 书写顺序
查看>>
NIO:与 Buffer 一起使用 Channel
查看>>
Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析
查看>>
Android - 广播机制和Service
查看>>
MFC接收ShellExecute多个参数
查看>>
volatile和synchronized的区别
查看>>
RocketMQ介绍与云服务器安装
查看>>
Jenkins插件HTML Publisher Plugin的使用
查看>>
A. The number of positions
查看>>
Windows中cmd的DOS命令查看占用某端口的程序及PID号
查看>>
设计多列布局
查看>>
返回一个整数数组中最大子数组的和
查看>>
解决FLASH遮住层的问题 IE,Firefox都适用!
查看>>
第七章:线程以及线程间的通信
查看>>
算法 PK 猫咪 | 章鱼保罗后继竟然是只猫?
查看>>
读书报告汇总
查看>>