




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、中南大學(xué)科研訓(xùn)練報(bào)告餐飲電子商務(wù)個(gè)性化推薦系統(tǒng)推薦算法研究 院 系: 軟件學(xué)院班 級: 1105班姓 名: 張學(xué) 號:指導(dǎo)老師: 餐飲電子商務(wù)個(gè)性化推薦系統(tǒng)推薦算法研究The Research on recommendation algorithm of Recommendation System in Catering E-Commerce 指導(dǎo)老師: 餐飲電子商務(wù)個(gè)性化推薦系統(tǒng)推薦算法科研報(bào)告 摘要:本文首先闡述了本算法的思想,基于分類的協(xié)同過濾推薦算法。給出了形式化的數(shù)學(xué)表達(dá)式。給出了協(xié)同過濾算法部分的詳細(xì)代碼和實(shí)驗(yàn)過程。然后,本文討論了實(shí)驗(yàn)平臺(tái)的改進(jìn)設(shè)想。最后討論了基于Hadoop和M
2、ahout 平臺(tái)推薦算法的實(shí)現(xiàn)。Abstract: This paper first expounds the thought of this algorithm, the collaborative filtering recommendation algorithm based on classification. The formal mathematical expressions are given. Detailed code part of the collaborative filtering algorithm is proposed and the experim
3、ental process. Then this paper discusses the experiment platform of improvement ideas. In the end implementation of recommended algorithm is discussed based on Hadoop and Mahout platform.關(guān)鍵詞:推薦系統(tǒng);協(xié)同過濾;Hadoop; Mahout Key words: recommendation system; Collaborative filtering; Hadoop一、 算法概述不
4、同的推薦系統(tǒng),它們的推薦算法和評價(jià)指標(biāo)都不盡相同。作為餐飲推薦系統(tǒng),至少存在以下幾個(gè)方面,與傳統(tǒng)(如圖書)的推薦系統(tǒng)(購買行為)不同。(1)受地域和消費(fèi)水平影響非常大。對于餐飲來說,極少會(huì)有去很遠(yuǎn)的地方或與自身消費(fèi)相去甚遠(yuǎn)的餐館消費(fèi)。(2)餐飲往往還有社交因素。有很多餐飲消費(fèi)發(fā)生在宴請、聚餐等行為。(3)餐飲還有重復(fù)性消費(fèi)的特點(diǎn)。由于時(shí)間和本人自身水平問題,很多問題尚不能考慮完全。暫且提出如下的推薦算法。(1) 根據(jù)餐館和用戶的位置,將餐館和用戶分類。相同地區(qū)的餐館和用戶才能發(fā)生相應(yīng)關(guān)系。這樣做第一可以提高推薦質(zhì)量,更主要的是可以減少算法的開銷。(2) 根據(jù)購買記錄、瀏覽記錄以及用戶興趣模型綜
5、合評分。這樣可以在一定程度上解決冷啟動(dòng)問題和評分稀疏性問題。(3) 根據(jù)評分利用協(xié)同過濾方法進(jìn)行推薦。二、 協(xié)同過濾算法的實(shí)現(xiàn)2.1基于用戶的協(xié)同過濾算法主要步驟描述由于時(shí)間問題和實(shí)驗(yàn)條件(缺乏實(shí)驗(yàn)數(shù)據(jù)源),本次訓(xùn)練暫且實(shí)現(xiàn)了基于用戶的協(xié)同過濾算法。算法的主要步驟如下。數(shù)據(jù)表示:在Userbased協(xié)同過濾推薦中,必須根據(jù)不同用戶對商品的評分信息產(chǎn)生推薦結(jié)果。用戶評分?jǐn)?shù)據(jù)可以用一個(gè)mn階矩陣A(m,n)表示,m行代表m個(gè)用戶,n列代表n個(gè)項(xiàng),第i行第j列的元素凡J代表用戶i對項(xiàng)j的評分。用戶評分?jǐn)?shù)據(jù)矩陣如圖2.1所示。 圖2.1: 用戶評分矩陣 最近鄰查詢:最近鄰查詢是整個(gè)Useobased協(xié)
6、同過濾推薦算法的核心部分,其效果和效率很大程度上決定了User一based協(xié)同過濾推薦算法的效果和效率。所謂最近鄰居,就是購買行為或評分行為與當(dāng)前用戶比較相似的若干用戶。最近鄰查詢階段實(shí)質(zhì)上就是Userbased協(xié)同過濾推薦算法的模型建立階段。1). 余弦相似性(Cosine):用戶評分看作為n維項(xiàng)空間上的向量,如果用戶對項(xiàng)沒有進(jìn)行評分,則將用戶對該項(xiàng)的評分設(shè)為O,用戶間的相似性通過向量間的余弦夾角度量。設(shè)用戶i和用戶j在n維項(xiàng)空間上的評分分別表示為向量I,j,則用戶i和用戶j之間的相似性sim(I,j)為:分子為兩個(gè)用戶評分向量的內(nèi)積,分母為兩個(gè)用戶向量模的乘積。通過上面提出的相似性度量方法
7、得到目標(biāo)用戶的最近鄰居,下一步需要產(chǎn)生相應(yīng)的推薦。設(shè)用戶u的最近鄰居集合用刀N公表示,則用戶u對項(xiàng)i的預(yù)測評分pu,可以通過用戶u對最近鄰居集合凡嘰中項(xiàng)的評分得到,計(jì)算方法如下 sim(u,n)表示用戶u與用戶n之間的相似性,Rn.j表示用戶n對項(xiàng)i的評分。Ru和Rn分別表示用戶u和用戶n對項(xiàng)的平均評分。2.2 實(shí)驗(yàn)的具體方法和步驟 實(shí)驗(yàn)環(huán)境: 開發(fā)工具:MyEclipe8.5 語音:java數(shù)據(jù)源;用戶評分矩陣static double userScore = new double 2,4,4,4,3,3,2,2,3,2,3,4,2,4,2,3,1,3,4,3,3,3,1,2,1,3,4,3
8、,3,5,3,2,1,3,5,4,4,3,2,1,3,2,3,3,3,3,2,3,3,4,4,3,3,3,2,2,4,2,5,3,3,3,1,1,;相關(guān)代碼:import java.util.Arrays;public class userCF /* * param args */ 索引分別代表用戶和商品,項(xiàng)代表用戶對商品的評分static double userScore = new double 2,4,4,4,3,3,2,2,3,2,3,4,2,4,2,3,1,3,4,3,3,3,1,2,1,3,4,3,3,5,3,2,1,3,5,4,4,3,2,1,3,2,3,3,3,3,2,3,3,
9、4,4,3,3,3,2,2,4,2,5,3,3,3,1,1,;static double sim = new double0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,;static double preScore = new double0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
10、,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,;/ 相似用戶集合static int nearUser = new int0,0,0;/ 計(jì)算相似度矩陣public static void setSim()for(int i=0;i<8;i+)for(int j= 0;j<8;j+)simij= vectorInnerProduct(i,j) / vectorProduct(i, j);/ 計(jì)算向量模的乘積public static double vectorProduct (int vector1,int vector2
11、)int Product1 = 0;int Product2 = 0;for(int i = 0;i<8;i+)Product1 += userScorevector1i * userScorevector1i;for(int i = 0;i<8;i+)Product2 += userScorevector2i * userScorevector2i;return Math.sqrt(Product1) * Math.sqrt(Product2);/ 計(jì)算向量內(nèi)積public static double vectorInnerProduct (int vector1,int vec
12、tor2)double toutle = 0;for(int i = 0;i<8;i+)toutle += userScorevector1i * userScorevector2i;return toutle;/ 功能:將相似度最大的三個(gè)用戶索引號按序儲(chǔ)存在數(shù)組nearUserpublic static void simMax(int user) double tempSort = new double8; for(int i=0;i<8;i+) tempSorti = simuseri; Arrays.sort(tempSort); for(int i=0;i<8;i+)
13、 if(tempSort6=simuseri) nearUser0= i; break; for(int i=0;i<8;i+) if(tempSort5=simuseri) nearUser1= i; break; for(int i=0;i<8;i+) if(tempSort4=simuseri) nearUser2= i; break; / 計(jì)算用戶對項(xiàng)目的平均評分public static double avgUserToItem(int user) double totalUserToItem = 0;for(int i = 0; i<8; i+)totalUser
14、ToItem += userScoreuseri;return totalUserToItem / 8;/ 計(jì)算預(yù)測得分public static double predictiveScore(int user,int item) double Score = 0;double sum1 = 0;double sum2 = 0; for(int i = 0;i <3;i+) sum1 += simuser nearUseri *( userScorenearUseriitem - avgUserToItem(nearUseri); for(int i = 0;i <3;i+) su
15、m2 += simuser nearUseri ; Score = avgUserToItem(user) + sum1/sum2 ;return Score;public static void main(String args) / TODO Auto-generated method stubsetSim();simMax(0);for(int i = 0; i <8; i+)for(int j = 0; j < 8; j+)preScoreij = predictiveScore(i,j );for(int i = 0; i < 8; i+)for(int j = 0
16、; j < 8; j+)System.out.print(preScoreij + " ");System.out.println(); / 平均準(zhǔn)確度誤差double avePre = 0;double totlePre = 0;for(int i = 0; i <8; i+)for(int j = 0; j < 8; j+)totlePre += Math.abs( userScoreij-preScoreij) / userScoreij );avePre = totlePre / 64; / 平均準(zhǔn)確度隨機(jī)誤差double avePreR = 0;
17、double totlePreR = 0;for(int i = 0; i <8; i+)for(int j = 0; j < 8; j+)totlePreR += Math.abs( userScoreij-Math.random()*5) / userScoreij );avePre = totlePre / 64;System.out.println(avePre);avePreR = totlePreR / 64;System.out.println(avePreR);2.3 實(shí)驗(yàn)的運(yùn)行結(jié)果如圖2.3所示 圖2.3:運(yùn)行結(jié)果圖可知采用此算法平均誤差百分比為25.13%采用隨
18、機(jī)數(shù)對比平均誤差百分比為61.63%實(shí)驗(yàn)表明本算法是具有顯著效果的。如果是客觀的數(shù)據(jù)源,我相信其準(zhǔn)確率還會(huì)增加。三、 實(shí)驗(yàn)平臺(tái)的改進(jìn)在數(shù)據(jù)挖掘中,往往是大規(guī)模數(shù)據(jù)。本次實(shí)驗(yàn)室在極為普通的環(huán)境下實(shí)現(xiàn),并沒有考慮到實(shí)際應(yīng)用中的問題。本次科研訓(xùn)練中我也嘗試在一些專業(yè)的平臺(tái)下實(shí)驗(yàn)。3.1 weka平臺(tái)眾所周知,weka是一款極為流行的數(shù)據(jù)挖掘平臺(tái)工具。研究生助教也是給我們介紹的是這個(gè)平臺(tái)。Weka平臺(tái)我認(rèn)為有以下幾個(gè)優(yōu)點(diǎn):(1)使用簡單。很多數(shù)據(jù)挖掘算法只要輕輕一點(diǎn),即可完成。(2)數(shù)據(jù)圖形化。很多算法可以提供圖形化的結(jié)果和挖掘過程。(3)開源免費(fèi)??梢赃M(jìn)行二次開發(fā)。Weka平臺(tái)如果想加入自己的算法,
19、就必須根據(jù)其源碼進(jìn)行二次開發(fā)。我的開發(fā)環(huán)境為MyEclipe8.5。導(dǎo)入開發(fā)包后的工程目錄如圖3.1所示。 圖3.1: 工程目錄主要的包如圖3.2所示。 圖3.2:主要的包目錄如包的名字所示。主要算法在相對的包中,weka.core提供了基本的功能類(類目錄如圖3.3所示)。主要的類有Attribute類,提供了屬性的相關(guān)操作。Instance類提供了實(shí)例的相關(guān)操作。Weka.gui包提供了關(guān)于圖形化界面的相關(guān)功能。 圖3.3:weka.core包目錄加入算法的步驟比較簡單。根據(jù)weka的API規(guī)范寫出算法類。然后可以在圖形化接口中加入相關(guān)算法的選項(xiàng)。但是我們做的有關(guān)推薦算法,比如協(xié)同推薦,在
20、weka中卻沒有任何體現(xiàn)和相關(guān)類或接口。所以我認(rèn)為用weka作為實(shí)驗(yàn)工具做個(gè)性化推薦算法不是一個(gè)好的選擇。3.2 Hadoop和Mahout 平臺(tái)Hadoop 是當(dāng)前熱門的云計(jì)算解決方案之一, 是Apache 組織的一個(gè)開源的分布式計(jì)算平臺(tái), 以Hadoop 分布式文件系統(tǒng)(HDFS)和MapReduce 為核心為用戶提供了系統(tǒng)底層細(xì)節(jié)透明的分布式基礎(chǔ)架構(gòu). 從而用戶可以利用Hadoop 輕松地組織計(jì)算機(jī)資源, 搭建自己的分布式計(jì)算平臺(tái), 并且可以充分利用集群的計(jì)算和存儲(chǔ)能力, 完成海量數(shù)據(jù)的處理.現(xiàn)在Hadoop 已經(jīng)發(fā)展成為包含了多個(gè)子項(xiàng)目的集合, 它們提供互補(bǔ)性服務(wù)或在核心層上
21、提供了更高層的服務(wù)。顯然利用Hadoop平臺(tái)是一個(gè)非常好的選擇。在選擇數(shù)據(jù)庫(數(shù)據(jù)倉庫)上HBase是個(gè)很好的選擇。HBase是一個(gè)分布式、面向列的開源數(shù)據(jù)庫, 在Hadoop 之上提供類似Bigtable 的能力. 不同于一般關(guān)系數(shù)據(jù)庫的數(shù)據(jù)模型, 用戶將數(shù)據(jù)存儲(chǔ)在一個(gè)表里,一個(gè)數(shù)據(jù)行擁有一個(gè)可選擇的鍵和任意數(shù)量的列. 主要用于需要隨機(jī)訪問、實(shí)時(shí)讀取的大數(shù)據(jù). 相比其他傳統(tǒng)關(guān)系型數(shù)據(jù)庫, HBase 數(shù)據(jù)庫有以下優(yōu)勢.HBase 是一個(gè)基于列模式的映射數(shù)據(jù)庫, HTable為null 的Column 不會(huì)被存儲(chǔ), 這樣既節(jié)省了空間又提高了讀性能, 很適宜存儲(chǔ)松散型數(shù)據(jù).HBase 架構(gòu)在Ha
22、doop 上, 不僅具有很好的可收縮性, 當(dāng)數(shù)據(jù)越來越大時(shí), 只要擴(kuò)展Hadoop 集群, HBase會(huì)自動(dòng)水平切分?jǐn)U展, 跟Hadoop 的無縫集合保障了其數(shù)據(jù)庫可靠性和海量數(shù)據(jù)分析的高性能.HBase 能夠結(jié)合使用MapReduce 編程框架并行處理大規(guī)模數(shù)據(jù), 使得數(shù)據(jù)存儲(chǔ)與并行計(jì)算完美地結(jié)合在一起。 實(shí)際上Apache基金會(huì)還提供了另一個(gè)關(guān)于機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘的開源項(xiàng)目Mahout。 Mahout平臺(tái)Mahout 是 Apache Software Foundation(ASF) 旗下的一個(gè)開源項(xiàng)目,提供一些可擴(kuò)展的機(jī)器學(xué)習(xí)領(lǐng)域經(jīng)典算法的實(shí)現(xiàn),旨在幫助開發(fā)人員更加方便快捷地創(chuàng)建智能應(yīng)用程序。Mahout包含許多實(shí)現(xiàn),包括聚類、分類、推薦過濾、頻繁子項(xiàng)挖掘。此外,通過使用 Apache Hadoop 庫,Mahout 可以有效地?cái)U(kuò)展到云中。Mahout項(xiàng)目中給出了一個(gè)關(guān)于協(xié)同過濾算法的高效實(shí)現(xiàn)。其相關(guān)的組件圖如3.4所示。 圖3.4:Mahout中協(xié)同過濾算法實(shí)現(xiàn)的組件圖 很遺憾,由于時(shí)間的限制,我還沒有完成Hadoop和Mahout平臺(tái)上關(guān)于本算法和系統(tǒng)的實(shí)現(xiàn)。四、 科研訓(xùn)練總結(jié)本次科研訓(xùn)練,我對數(shù)據(jù)挖掘,特別是個(gè)性化推薦系統(tǒng)有了一定了解。鍛煉了我一定的自學(xué)能力和科研能力。掌握了做科研的部分方法,如查文獻(xiàn)等。對我的成長具有很大的幫助。本次訓(xùn)練也留下了很多
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025建筑工地吊車租賃合同示范文本
- 2025合同條款中的格式條款和霸王條款
- 內(nèi)科體液調(diào)節(jié)護(hù)理
- 皮疹的護(hù)理診斷
- 2025年遼寧省本溪市中考二模地理與生物試題
- 2025年風(fēng)濕免疫理論知識(shí)試題
- 醫(yī)學(xué)倫理與器官移植核心議題
- 小學(xué)生流感傳染病防控教育
- 傳染性肝炎防治與管理
- 小兒碘缺乏癥的臨床護(hù)理
- 安徽省1號卷A10聯(lián)盟2025屆高三5月最后一卷地理試題及答案
- 倉庫定置目視化管理
- 2025年5月12日陜西省公務(wù)員面試真題及答案解析
- 2025-2030中國海上風(fēng)電行業(yè)市場深度調(diào)研及投資策略與投資前景研究報(bào)告
- 工程經(jīng)濟(jì)課件
- 變電站值班員-中級工考試模擬題及參考答案解析
- 2024年西雙版納州景洪市事業(yè)單位選調(diào)工作人員筆試真題
- 2025-2030中國活塞桿行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報(bào)告
- 浙江省紹興市柯橋區(qū)2025年5月統(tǒng)考英語試題試卷含解析
- 健康理療室管理制度
- 燃?xì)庑袠I(yè)數(shù)字化轉(zhuǎn)型趨勢分析-全面剖析
評論
0/150
提交評論