RecommenderFilterSalaryResult
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<Long, Double> 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<Long, Double> averSalary) throws TasteException, IOException {
Set<Long> jobids = getSalaryJobID(uid, "datafile/job/job.csv", averSalary);
IDRescorer rescorer = new JobRescorer(jobids);
List<RecommendedItem> list = recommenderBuilder.buildRecommender(dataModel).recommend(uid, RECOMMENDER_NUM, rescorer);
RecommendFactory.showItems(uid, list, false);
} public static Set<Long> getSalaryJobID(long uid, String file, Map<Long, Double> averSalary) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(new File(file)));
Set<Long> jobids = new HashSet<Long>();
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<Long, Double> getAverSalary(String file, DataModel dataModel)
throws NumberFormatException, IOException, TasteException{
Map<Long, Double> salaries = new HashMap<Long, Double>();
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<Long, Double> averSalaries = new HashMap<Long, Double>();
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;
} }
RecommenderFilterSalaryResult的更多相关文章
- 转】用Mahout构建职位推荐引擎
原博文出自于: http://blog.fens.me/hadoop-mahout-recommend-job/ 感谢! 用Mahout构建职位推荐引擎 Hadoop家族系列文章,主要介绍Hadoop ...
随机推荐
- Codeforces 366C Dima and Salad:背包dp
题目链接:http://codeforces.com/problemset/problem/366/C 题意: 有n个物品,每个物品有两个属性a[i]和b[i]. 给定k,让你选出一些物品,使得 ∑ ...
- 目标检测 — one-stage检测(二)
one-stage检测算法,其不需要region proposal阶段,直接产生物体的类别概率和位置坐标值,经过单次检测即可直接得到最终的检测结果,因此有着更快的检测速度,比较典型的算法如YOLO,S ...
- Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化
对其用户和应用程序来讲,每一个VPS平台的运行和管理都与一台独立主机完全相同,因为每一个VPS均可独立进行重启并拥有自己的root访问权限.用户.IP地址.内存.过程.文件.应用程序.系统函数库以及配 ...
- 十四 Django框架,中间件
django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的se ...
- Progressive Web App是一个利用现代浏览器的能力来达到类似APP的用户体验的技术——不就是chrome OS吗?
什么是Progressive Web App? Progressive Web App是一个利用现代浏览器的能力来达到类似APP的用户体验的技术,由Google实现,让浏览器打开的网址像APP一样运行 ...
- 6 Python 数据类型—字符串
字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可. var1 = 'Hello World!' var2 = ...
- BEC listen and translation exercise 36
你所持的护照可使你享有免费医疗.Your passport qualifies you to receive free medical treatment.公司指使其职员挖对手的客户.The comp ...
- 关于com组件中idl文件的理解
IDL文件: IDL文件主要定义两大类内容:一是定义接口:二是定义类型库. 定义接口的关键字是interface.每个接口定义前面方括号里面的内容是该接口的属性,最重要的是uuid的定义.该部分经过M ...
- freeMarker(十四)——XML处理指南之必要的XML处理
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.基本内容 假设程序员在数据模型中放置了一个XML文档,就是名为 d ...
- redisCheckMem脚本
最近维护的redis cluster需要扫描每个实例的内存使用率,首先我们需要获取实例已经使用的内存,获取实例的最大内存配额,两个值相比就能获取到内存使用比例. 实例的最大内存获取方法: $REDIS ...