141016用m構(gòu)建職位推薦引擎_第1頁
141016用m構(gòu)建職位推薦引擎_第2頁
141016用m構(gòu)建職位推薦引擎_第3頁
141016用m構(gòu)建職位推薦引擎_第4頁
141016用m構(gòu)建職位推薦引擎_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、前言隨著大數(shù)據(jù)思想實(shí)施的落地,推薦系統(tǒng)也開始倍受關(guān)注。不光是用推薦系統(tǒng),像搜索,社交網(wǎng)絡(luò),音樂,餐飲,地圖服務(wù)等等。,各種互聯(lián)網(wǎng)應(yīng)用都開始應(yīng)在以前,我們沒有使用推薦算法的時(shí)候,我們是通過設(shè)置各種約束條件,匹配數(shù)據(jù)的自然屬性呈現(xiàn)給用戶,這種就是基于規(guī)則的系統(tǒng)。比如,用戶了一個(gè)商品,我們會(huì)推薦同類別的其他商品,通過類別屬性作為推薦的規(guī)則。后來問題就出現(xiàn)了,當(dāng)用戶買了多種類別的不同商品的時(shí)候,前一條規(guī)則就失敗了,我們要進(jìn)一步設(shè)計(jì)規(guī)則,IT 類別優(yōu)先推薦,價(jià)格高的優(yōu)先推薦.幾個(gè)回合下來,我們要不停的增加規(guī)則,以至于規(guī)則有可能的會(huì)前后的規(guī)則會(huì)讓推薦結(jié)果越來越不好,而且還無法解釋是為什么。,增加一條新推薦

2、算法從另一角度入手,解決了基于規(guī)則設(shè)置的問題。下面將用 Mahout 來構(gòu)建一個(gè)職位推薦算法引擎。目錄Mahout 推薦框架概述需求分析:職位推薦引擎指標(biāo)設(shè)計(jì)算法模型:推薦算法架構(gòu)設(shè)計(jì):職位推薦引擎系統(tǒng)架構(gòu)程序開發(fā):基于 Mahout 的推薦算法實(shí)現(xiàn)1.2.3.4.5.1. Mahout 推薦系統(tǒng)框架概述Mahout 框架包含了一套完整的推薦系統(tǒng)引擎,標(biāo)準(zhǔn)化的數(shù)據(jù)結(jié)構(gòu),多樣的算法實(shí)現(xiàn),簡(jiǎn)單的開發(fā)流程。Mahout 推薦的推薦系統(tǒng)引擎是模塊化的,分為 5 個(gè)主要部分組成:數(shù)據(jù)模型,相似度算法,近鄰算法,推薦算法,算法評(píng)分器。更詳細(xì)的介紹,請(qǐng)參考文章:從源代碼剖析 Mahout 推薦引擎2. 需求

3、分析:職位推薦引擎指標(biāo)設(shè)計(jì)下面從一個(gè)公司案例出發(fā)來全面的解釋,如何進(jìn)行職位推薦引擎指標(biāo)設(shè)計(jì)。案例介紹:互聯(lián)網(wǎng)某職業(yè)社交,主要包括 個(gè)人簡(jiǎn)歷展示頁,人脈圈,及,職位發(fā)布,職位申請(qǐng),教育培訓(xùn)等。用戶在完成后,需的個(gè)人信息,包括教育背景,工作經(jīng)歷,項(xiàng)目經(jīng)歷,技能專長(zhǎng),你是否想找工作!當(dāng)你選擇“是”(求職中),的職位。等等信息。然后,你要告訴庫中為你推薦你可能感會(huì)從數(shù)據(jù)通過簡(jiǎn)短的描述,我們可以粗略地看出,這家職業(yè)社交的和主營(yíng)業(yè)務(wù)。點(diǎn)有 2 個(gè):··用戶:盡可能多的保存有效完整的用戶資料服務(wù):幫助用戶找到工作,幫助獵頭和企業(yè)找到員工因此,職位推薦引擎 將成為這個(gè)的功能。KPI 指標(biāo)設(shè)

4、計(jì)通過推薦帶來的職位瀏覽量: 職位網(wǎng)頁的 PV通過推薦帶來的職位申請(qǐng)量: 職位網(wǎng)頁的有效轉(zhuǎn)化··3. 算法模型:推薦算法2 個(gè)測(cè)試數(shù)據(jù)集:··pv.csv: 職位被瀏覽的信息,包括用戶 ID,職位 IDjob.csv: 職位基本信息,包括職位 ID,工資標(biāo)準(zhǔn)1). pv.csv2 列數(shù)據(jù):用戶 ID,職位 ID(userid,jobid)········瀏覽:2500 條用戶數(shù):1000 個(gè),用戶 ID:1-1000職位數(shù):200 個(gè),職位 ID:1-200部分?jǐn)?shù)據(jù):2).

5、job.csv3 列數(shù)據(jù):職位 ID,··,工資標(biāo)準(zhǔn)(jobid,create_date,salary)職位數(shù):200 個(gè),職位 ID:1-200部分?jǐn)?shù)據(jù):1,2013-01-24,56002,2011-03-02,54003,2011-03-14,81004,2012-10-05,22005,2011-09-03,141006,2011-03-05,65007,2012-06-06,370008,2013-02-18,55009,2010-07-05,750010,2010-01-23,670011,2011-09-19,520012,2010-01-19,2970013

6、,2013-09-28,600014,2013-10-23,330015,2010-10-09,270016,2010-07-14,51001,112,1362,1873,1653,13,244,84,1995,325,1006,147,597,1478,929,1659,809,17110,4510,3110,110,152為了完成 KPI 的指標(biāo),我們把問題用“技術(shù)”語言轉(zhuǎn)化一下:我們需要讓職位的推薦結(jié)果更準(zhǔn)確,從而增加用戶的點(diǎn)擊。····1. 組合使用推薦算法,選出“評(píng)估推薦器”驗(yàn)證得分較高的算法2. 人工驗(yàn)證推薦結(jié)果3. 職位有時(shí)效薦的結(jié)果應(yīng)該是

7、發(fā)布半年內(nèi)的職位4. 工資的標(biāo)準(zhǔn),應(yīng)不低于用戶瀏覽職位工資的平均值的 80%我們選擇 UserCF,ItemCF,SlopeOne 的 3 種推薦算法,進(jìn)行 7 種組合的測(cè)試。·userCF1: LogLikelihoodSimilarity + NearestNUserNeighborhood +GenericBooleanPrefUserBasedRecommenderuserCF2: CityBlockSimilarity+ NearestNUserNeighborhood +GenericBooleanPrefUserBasedRecommenderuserCF3: User

8、Tanimoto + NearestNUserNeighborhood +GenericBooleanPrefUserBasedRecommenderitemCF1: LogLikelihoodSimilarity + GenericBooleanPrefItemBasedRecommender itemCF2: CityBlockSimilarity+ GenericBooleanPrefItemBasedRecommender itemCF3: ItemTanimoto + GenericBooleanPrefItemBasedRecommenderslopeOne:SlopeOneRec

9、ommender······關(guān)于的推薦算法的詳細(xì)介紹,請(qǐng)參考文章:Mahout 推薦算法 API 詳解關(guān)于算法的組合的詳細(xì)介紹,請(qǐng)參考文章:從源代碼剖析 Mahout 推薦引擎4. 架構(gòu)設(shè)計(jì):職位推薦引擎系統(tǒng)架構(gòu)17,2010-05-13,2900018,2010-01-16,2180019,2013-05-23,570020,2011-04-24,5900上圖中,左邊是 Application 業(yè)務(wù)系統(tǒng),右邊是 Mahout,下邊是 Hadoop 集群。·1. 當(dāng)數(shù)據(jù)量不太大時(shí),并且算法復(fù)雜,直接選擇用 MahoutCSV

10、 或者 Database 數(shù)據(jù),在單機(jī)內(nèi)存中進(jìn)行計(jì)算。Mahout 是多線程的應(yīng)用,會(huì)并行使用單機(jī)所有系統(tǒng)。·2. 當(dāng)數(shù)據(jù)量很大時(shí),選擇并行化算法(ItemCF),先業(yè)務(wù)系統(tǒng)的數(shù)據(jù)導(dǎo)入到 Hadoop 的 HDFS 中,然后用 MahoutHDFS 實(shí)現(xiàn)算法,這時(shí)算法的性能與整個(gè) Hadoop 集群有關(guān)。·3. 計(jì)算后的結(jié)果,保存到數(shù)據(jù)庫中,方便5. 程序開發(fā):基于 Mahout 的推薦算法實(shí)現(xiàn)開發(fā)環(huán)境 mahout 版本為 0.8。 ,請(qǐng)參考文章:用 Maven 構(gòu)建 Mahout 項(xiàng)目新建 Java 類:····Recommend

11、erEvaluator.java, 選出“評(píng)估推薦器”驗(yàn)證得分較高的算法RecommenderResult.java, 對(duì)指定數(shù)量的結(jié)果人工比較RecommenderFilterOutdateResult.java,排除過期職位RecommenderFilterSalaryResult.java,排除工資過低的職位1). RecommenderEvaluator.java, 選出“評(píng)估推薦器”驗(yàn)證得分較高的算源代碼:public class RecommenderEvaluator final static int NEIGHBORHOOD_NUM = 2; final static int

12、RECOMMENDER_NUM = 3; public static void main(String args) throws TasteException, IOException String file = "datafile/job/pv.csv" DataM dataM = RecommendFactory.buildDataMNoPref(file); userLoglikelihood(dataM); userCityBlock(dataM); userTanimoto(dataM); itemLoglikelihood(dataM); itemCityBlo

13、ck(dataM); itemTanimoto(dataM); slopeOne(dataM); public static RecommenderBuilder userLoglikelihood(DataM dataM) throwsTasteException, IOException System.out.println("userLoglikelihood"); UserSimilarity userSimilarity = RecommendFactory.userSimilarity(RecommendFactory.SIMILARITY.LOGLIKELIH

14、OOD, dataM); UserNeighborhood userNeighborhood = RecommendFactory.userNeighborhood(RecommendFactory.NEIGHBORHOOD.NEAREST, userSimilarity, dataM, NEIGHBORHOOD_NUM); RecommenderBuilder recommenderBuilder = RecommendFactory.userRecommender(userSimilarity, userNeighborhood, false);RecommendFactory.evalu

15、ate(RecommendFactory.EVALUATOR.AVERAGE_ABSOLUTE_DIFFERENCE, recommenderBuilder, null, dataM, 0.7); RecommendFactory.statsEvaluator(recommenderBuilder, null, dataM, 2); return recommenderBuilder; public static RecommenderBuilder userCityBlock(DataM dataM) throws TasteException, IOException System.out

16、.println("userCityBlock"); UserSimilarity userSimilarity = RecommendFactory.userSimilarity(RecommendFactory.SIMILARITY.CITYBLOCK, dataM); UserNeighborhood userNeighborhood = RecommendFactory.userNeighborhood(RecommendFactory.NEIGHBORHOOD.NEAREST, userSimilarity, dataM, NEIGHBORHOOD_NUM); R

17、ecommenderBuilder recommenderBuilder = RecommendFactory.userRecommender(userSimilarity, userNeighborhood, false);RecommendFactory.evaluate(RecommendFactory.EVALUATOR.AVERAGE_ABSOLUTE_DIFFERENCE, recommenderBuilder, null, dataM, 0.7); RecommendFactory.statsEvaluator(recommenderBuilder, null, dataM, 2

18、); return recommenderBuilder; public static RecommenderBuilder userTanimoto(DataM dataM) throws TasteException, IOException System.out.println("userTanimoto"); UserSimilarity userSimilarity = RecommendFactory.userSimilarity(RecommendFactory.SIMILARITY.TANIMOTO, dataM); UserNeighborhood use

19、rNeighborhood = RecommendFactory.userNeighborhood(RecommendFactory.NEIGHBORHOOD.NEAREST, userSimilarity, dataM, NEIGHBORHOOD_NUM); RecommenderBuilder recommenderBuilder = RecommendFactory.userRecommender(userSimilarity, userNeighborhood, false);RecommendFactory.evaluate(RecommendFactory.EVALUATOR.AV

20、ERAGE_ABSOLUTE_DIFFERENCE,recommenderBuilder, null, dataM, 0.7); RecommendFactory.statsEvaluator(recommenderBuilder, null, dataM, 2); return recommenderBuilder; public static RecommenderBuilder itemLoglikelihood(DataM dataM) throwsTasteException, IOException System.out.println("itemLoglikelihoo

21、d"); ItemSimilarity itemSimilarity = RecommendFactory.itemSimilarity(RecommendFactory.SIMILARITY.LOGLIKELIHOOD, dataM); RecommenderBuilder recommenderBuilder = RecommendFactory.itemRecommender(itemSimilarity, false);RecommendFactory.evaluate(RecommendFactory.EVALUATOR.AVERAGE_ABSOLUTE_DIFFERENC

22、E, recommenderBuilder, null, dataM, 0.7); RecommendFactory.statsEvaluator(recommenderBuilder, null, dataM, 2); return recommenderBuilder; public static RecommenderBuilder itemCityBlock(DataM dataM) throws TasteException, IOException System.out.println("itemCityBlock"); ItemSimilarity itemS

23、imilarity = RecommendFactory.itemSimilarity(RecommendFactory.SIMILARITY.CITYBLOCK, dataM); RecommenderBuilder recommenderBuilder = RecommendFactory.itemRecommender(itemSimilarity, false);RecommendFactory.evaluate(RecommendFactory.EVALUATOR.AVERAGE_ABSOLUTE_DIFFERENCE,recommenderBuilder, null, dataM,

24、 0.7); RecommendFactory.statsEvaluator(recommenderBuilder, null, dataM, 2); return recommenderBuilder; public static RecommenderBuilder itemTanimoto(DataM dataM) throws TasteException, IOException System.out.println("itemTanimoto"); ItemSimilarity itemSimilarity = RecommendFactory.itemSimi

25、larity(RecommendFactory.SIMILARITY.TANIMOTO, dataM); RecommenderBuilder recommenderBuilder = RecommendFactory.itemRecommender(itemSimilarity, false);RecommendFactory.evaluate(RecommendFactory.EVALUATOR.AVERAGE_ABSOLUTE_DIFFERENCE, recommenderBuilder, null, dataM, 0.7); RecommendFactory.statsEvaluato

26、r(recommenderBuilder, null, dataM, 2); return recommenderBuilder; public static RecommenderBuilder slopeOne(DataM dataM) throws TasteException, IOException System.out.println("slopeOne"); RecommenderBuilder recommenderBuilder = RecommendFactory.slopeOneRecommender();RecommendFactory.evalua

27、te(RecommendFactory.EVALUATOR.AVERAGE_ABSOLUTE_DIFFERENCE, recommenderBuilder, null, dataM, 0.7); RecommendFactory.statsEvaluator(recommenderBuilder, null, dataM, 2); return recommenderBuilder; public static RecommenderBuilder knnLoglikelihood(DataM dataM) throws TasteException, IOException System.o

28、ut.println("knnLoglikelihood"); ItemSimilarity itemSimilarity = RecommendFactory.itemSimilarity(RecommendFactory.SIMILARITY.LOGLIKELIHOOD, dataM); RecommenderBuilder recommenderBuilder = RecommendFactory.itemKNNRecommender(itemSimilarity, new NonNegativeQuadraticOptimizer(), 10);RecommendF

29、actory.evaluate(RecommendFactory.EVALUATOR.AVERAGE_ABSOLUTE_DIFFERENCE, recommenderBuilder, null, dataM, 0.7); RecommendFactory.statsEvaluator(recommenderBuilder, null, dataM, 2); return recommenderBuilder; public static RecommenderBuilder knnTanimoto(DataM dataM) throws TasteException, IOException

30、System.out.println("knnTanimoto"); ItemSimilarity itemSimilarity = RecommendFactory.itemSimilarity(RecommendFactory.SIMILARITY.TANIMOTO, dataM); RecommenderBuilder recommenderBuilder = RecommendFactory.itemKNNRecommender(itemSimilarity, new NonNegativeQuadraticOptimizer(), 10);RecommendFac

31、tory.evaluate(RecommendFactory.EVALUATOR.AVERAGE_ABSOLUTE_DIFFERENCE, recommenderBuilder, null, dataM, 0.7); RecommendFactory.statsEvaluator(recommenderBuilder, null, dataM, 2); return recommenderBuilder; public static RecommenderBuilder knnCityBlock(DataM dataM) throws TasteException, IOException S

32、ystem.out.println("knnCityBlock"); ItemSimilarity itemSimilarity = RecommendFactory.itemSimilarity(RecommendFactory.SIMILARITY.CITYBLOCK, dataM); RecommenderBuilder recommenderBuilder = RecommendFactory.itemKNNRecommender(itemSimilarity, new NonNegativeQuadraticOptimizer(), 10);RecommendFa

33、ctory.evaluate(RecommendFactory.EVALUATOR.AVERAGE_ABSOLUTE_DIFFERENCE,recommenderBuilder, null, dataM, 0.7); RecommendFactory.statsEvaluator(recommenderBuilder, null, dataM, 2); return recommenderBuilder; public static RecommenderBuilder svd(DataM dataM) throws TasteException System.out.println(&quo

34、t;svd"); RecommenderBuilder recommenderBuilder = RecommendFactory.svdRecommender(new ALSWRFactorizer(dataM, 5, 0.05, 10);RecommendFactory.evaluate(RecommendFactory.EVALUATOR.AVERAGE_ABSOLUTE_DIFFERENCE, recommenderBuilder, null, dataM, 0.7); RecommendFactory.statsEvaluator(recommenderBuilder, n

35、ull, dataM, 2); return recommenderBuilder; public static RecommenderBuilder treeClusterLoglikelihood(DataM dataM)throws TasteException System.out.println("treeClusterLoglikelihood"); UserSimilarity userSimilarity = RecommendFactory.userSimilarity(RecommendFactory.SIMILARITY.LOGLIKELIHOOD,

36、dataM); ClusterSimilarity clusterSimilarity = RecommendFactory.clusterSimilarity(RecommendFactory.SIMILARITY.FARTHEST_NEIGHBOR_ CLUSTER, userSimilarity); RecommenderBuilder recommenderBuilder = RecommendFactory.treeClusterRecommender(clusterSimilarity, 3);RecommendFactory.evaluate(RecommendFactory.E

37、VALUATOR.AVERAGE_ABSOLUTE_DIFFERENCE,recommenderBuilder, null, dataM, 0.7);運(yùn)行結(jié)果,臺(tái)輸出:可視化“評(píng)估推薦器”輸出:userLoglikelihoodAVERAGE_ABSOLUTE_DIFFERENCE Evaluater Score:0.2741487771272658Recommender IR Evaluator: Precision:0.6424242424242422,Recall:0.4098360655737705 userCityBlockAVERAGE_ABSOLUTE_DIFFERENCE Ev

38、aluater Score:0.575306732961736Recommender IR Evaluator: Precision:0.919580419580419,Recall:0.4371584699453552 userTanimotoAVERAGE_ABSOLUTE_DIFFERENCE Evaluater Score:0.5546485136181523Recommender IR Evaluator: Precision:0.6625766871165644,Recall:0.41803278688524603 itemLoglikelihoodAVERAGE_ABSOLUTE

39、_DIFFERENCE Evaluater Score:0.5398332608612343Recommender IR Evaluator: Precision:0.26229508196721296,Recall:0.26229508196721296itemCityBlockAVERAGE_ABSOLUTE_DIFFERENCE Evaluater Score:0.9251437840891661Recommender IR Evaluator: Precision:0.02185792349726776,Recall:0.02185792349726776itemTanimotoAVE

40、RAGE_ABSOLUTE_DIFFERENCE Evaluater Score:0.9176432856689655Recommender IR Evaluator: Precision:0.26229508196721296,Recall:0.26229508196721296slopeOneAVERAGE_ABSOLUTE_DIFFERENCE Evaluater Score:0.0 Recommender IR Evaluator: Precision:0.01912568306010929,Recall:0.01912568306010929 RecommendFactory.sta

41、tsEvaluator(recommenderBuilder, null, dataM, 2); return recommenderBuilder; UserCityBlock 算法評(píng)估的結(jié)果是最好的,基于UserCF 的算法比 ItemCF 都要好,SlopeOne算法幾乎沒有得分。2). RecommenderResult.java, 對(duì)指定數(shù)量的結(jié)果人工比較為得到差異化結(jié)果,我們分別取 UserCityBlock,itemLoglikelihood,對(duì)推薦結(jié)果人工比較。源代碼:public class RecommenderResult final static int NEIGHBO

42、RHOOD_NUM = 2; final static int RECOMMENDER_NUM = 3; public static void main(String args) throws TasteException, IOException String file = "datafile/job/pv.csv" DataM dataM = RecommendFactory.buildDataMNoPref(file); RecommenderBuilder rb1 = RecommenderEvaluator.userCityBlock(dataM);臺(tái)輸出:只截取

43、部分結(jié)果我們查看 uid=974 的用戶推薦信息:搜索 pv.csv:.userCityBlock=>uid:968,(61,0.333333) itemLoglikelihood=>uid:968,(121,1.429362)(153,1.239939)(198,1.207726)userCityBlock=>uid:969, itemLoglikelihood=>uid:969,(75,1.326499)(30,0.873100)(85,0.763344)userCityBlock=>uid:970, itemLoglikelihood=>uid:970

44、,(13,0.748417)(156,0.748417)(122,0.748417)userCityBlock=>uid:971, itemLoglikelihood=>uid:971,(38,2.060951)(104,1.951208)(83,1.941735)userCityBlock=>uid:972, itemLoglikelihood=>uid:972,(131,1.378395)(4,1.349386)(87,0.881816)userCityBlock=>uid:973, itemLoglikelihood=>uid:973,(196,1.4

45、32040)(140,1.398066)(130,1.380335)userCityBlock=>uid:974,(19,0.200000) itemLoglikelihood=>uid:974,(145,1.994049)(121,1.794289)(98,1.738027). RecommenderBuilder rb2 = RecommenderEvaluator.itemLoglikelihood(dataM); LongPrimitiveIterator iter = dataM.getUserIDs(); while (iter.hasNext() long uid =

46、 iter.nextLong(); System.out.print("userCityBlock=>"); result(uid, rb1, dataM); System.out.print("itemLoglikelihood=>"); result(uid, rb2, dataM); public static void result(long uid, RecommenderBuilder recommenderBuilder, DataMdataM) throws TasteException List list = recomme

47、nderBuilder.buildRecommender(dataM).recommend(uid, RECOMMENDER_NUM); RecommendFactory.showItems(uid, list, false); 搜索 job.csv:上面兩種算法,推薦的結(jié)果都是 2010 年的職位,這些結(jié)果并不是太好,接下來我們要排除過期職位,只保留 2013 年的職位。3).RecommenderFilterOutdateResult.java,排除過期職位源代碼:public class RecommenderFilterOutdateResult final static int NE

48、IGHBORHOOD_NUM = 2; final static int RECOMMENDER_NUM = 3; public static void main(String args) throws TasteException, IOException String file = "datafile/job/pv.csv" DataM dataM = RecommendFactory.buildDataMNoPref(file); RecommenderBuilder rb1 = RecommenderEvaluator.userCityBlock(dataM); R

49、ecommenderBuilder rb2 = RecommenderEvaluator.itemLoglikelihood(dataM); LongPrimitiveIterator iter = dataM.getUserIDs(); while (iter.hasNext() long uid = iter.nextLong(); System.out.print("userCityBlock=>"); filterOutdate(uid, rb1, dataM); System.out.print("itemLoglikelihood=>&qu

50、ot;); filterOutdate(uid, rb2, dataM); > jobjob$jobid %in% c(145,121,98,19), jobid create_date salary 1919 2013-05-2357009898 2010-01-152900121 121 2010-06-195300145 145 2013-08-026800> pvwhich(pv$userid=974), userid jobid 2426974 1062427974 1732428974822429974 188243097478 public static void f

51、ilterOutdate(long uid, RecommenderBuilder recommenderBuilder, DataMdataM) throws TasteException, IOException Set jobids = getOutdateJobID("datafile/job/job.csv"); IDRescorer rescorer = new JobRescorer(jobids); List list = recommenderBuilder.buildRecommender(dataM).recommend(uid, RECOMMENDE

52、R_NUM, rescorer); RecommendFactory.showItems(uid, list, true); public static Set getOutdateJobID(String file) 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(

53、","); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try date = df.parse(cols1); if (date.getTime() < df.parse("2013-01-01").getTime() jobids.add(Long.parseLong(cols0); catch (ParseException e) e.printStackTrace(); br.close(); return jobi

54、ds; class JobRescorer implements IDRescorer final private Set jobids; public JobRescorer(Set jobs) this.jobids = jobs; Override public double rescore(long id, double originalScore) return isFiltered(id) ? Double.NaN : originalScore; 臺(tái)輸出:只截取部分結(jié)果我們查看 uid=994 的用戶推薦信息:搜索 pv.csv:搜索 job.csv:> jobjob$jobid %in% c(19,145,89),> pvwhich(pv$userid=974), userid jobid 2426974 1062427974 1732428974822429974 1882

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論