




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、目錄基于Knn算法的圖書推薦系統(tǒng)IBook recommendationsystem based onKnn algorithmII第1章緒論11.1應(yīng)用背景11.2系統(tǒng)功能21.3系統(tǒng)預(yù)覽21.4系統(tǒng)特點1第2章開發(fā)環(huán)境及工具22.1系統(tǒng)開發(fā)環(huán)境22.2系統(tǒng)架構(gòu)模型22.3系統(tǒng)開發(fā)技術(shù)32.3.1 R語言簡介32.3.2數(shù)據(jù)庫技術(shù)簡介32.3.3 Java簡介4第3章系統(tǒng)設(shè)計與數(shù)據(jù)庫53.1系統(tǒng)設(shè)計53.1.1 系統(tǒng)功能模塊劃分53.2數(shù)據(jù)庫結(jié)構(gòu)5第4章 K最近鄰分類(Knn)算法介紹64.1 Knn算法簡介64.2 算法流程64.3 算法優(yōu)缺點74.3.1 優(yōu)點74.3.2 缺點7第5章
2、Knn算法在圖書推薦系統(tǒng)的實現(xiàn)85.1 訓(xùn)練集數(shù)據(jù)train.data85.2建立讀者-書目矩陣95.3計算書目距離矩陣distance105.4計算讀者和書目的關(guān)系程度105.5計算用戶的推薦書目id115.6 查詢推薦書目的具體信息13第6章 SQL Server數(shù)據(jù)庫、Java語言與R的組合146.1 簡述146.2 SQL Server數(shù)據(jù)庫與R語言146.3 R語言與Java語言15參考文獻(xiàn)16致謝17附錄18基于Knn算法的圖書推薦系統(tǒng)摘要:互聯(lián)網(wǎng)的出現(xiàn)和普及給用戶帶來了大量的信息,滿足了用戶在信息時代對信息的需求的同時,也使得用戶在面對大量信息時無法從中獲得對自己真正有用的那部分
3、信息,而產(chǎn)生所謂的信息超載問題,推薦系統(tǒng)就這樣應(yīng)運而生。推薦系統(tǒng)現(xiàn)已廣泛應(yīng)用于很多領(lǐng)域,其中最典型并具有良好的發(fā)展和應(yīng)用前景的領(lǐng)域就是電子商務(wù)領(lǐng)域。個性化推薦系統(tǒng)是建立在海量數(shù)據(jù)挖掘基礎(chǔ)上的一種高級商務(wù)智能平臺,以幫助電子商務(wù)網(wǎng)站為其顧客購物提供完全個性化的決策支持和信息服務(wù)。同時學(xué)術(shù)界對推薦系統(tǒng)的研究熱度一直很高,逐步形成了一門獨立的學(xué)科。本文介紹的推薦系統(tǒng),一方面根據(jù)學(xué)校的圖書借閱情況,構(gòu)建出基于Knn算法的圖書推薦系統(tǒng),可以解決同學(xué)們借書沒有頭緒,借不到適合自己的書等等問題,另一方面實現(xiàn)了數(shù)據(jù)、算法、成果展示的分離,使得程序設(shè)計、大數(shù)據(jù)處理、前端展示的分工更加明確簡潔。本系統(tǒng)采用了統(tǒng)計領(lǐng)
4、域廣泛使用的R軟件,適于數(shù)據(jù)存儲與挖掘的SQL Server 2008,以及適用于前端展示的Java語言,通過三者的協(xié)調(diào)互助,共同完成推薦系統(tǒng)的數(shù)據(jù)存儲、挖掘以及展示工作。關(guān)鍵詞:推薦系統(tǒng) Knn算法專屬推薦 大數(shù)據(jù)挖掘 R軟件Book recommendationsystem based onKnn algorithmAbstract: The emergence and popularization of the Internet users to bring a great deal of information, meet the users at the same time the
5、need for information in the information age, but also makes the user in the face of a large amount of information cannot be obtained from that part of the information they really useful, and produce the information overload the so-called problems, recommendation system comes. Recommendation system h
6、as been widely used in many fields, among which the most typical and has good prospects for the development and application of the field is the field of electronic commerce. Personalized recommender system is established on the basis of a senior mining business intelligence platform in the massive d
7、ata, in order to help e-commerce sites provide complete personalized decision support and information service for the customer shopping. At the same time, the research heat system to recommend the academic community has been very high, and gradually formed an independent discipline.Recommendation sy
8、stem is introduced in this paper, hand according to books borrowing situation of the school, build a recommendation system based on Knn algorithm library, can solve the students borrow books have no clue, borrow not suitable for their own books and so on, on the other hand to achieve the separation
9、of data, algorithms, the results show that the program design, large data, processing, front-end display division more clear and concise.This system adopts the widely used R software for statistical field, data storage and data mining in SQL Server 2008, and the application of Java language in the f
10、ront display, through the coordination of the three cooperation, jointly completed recommendation system for data storage, and display the work of mining.Key words:Recommendation system;Knn algorithm;exclusiverecommendation ; largedata mining; R software第1章 緒論推薦系統(tǒng)現(xiàn)已廣泛應(yīng)用于很多領(lǐng)域,其中最典型并具有良好的發(fā)展和應(yīng)用前景的領(lǐng)域就是電
11、子商務(wù)領(lǐng)域。個性化推薦系統(tǒng)是建立在海量數(shù)據(jù)挖掘基礎(chǔ)上的一種高級商務(wù)智能平臺,以幫助電子商務(wù)網(wǎng)站為其顧客購物提供完全個性化的決策支持和信息服務(wù)。對于我們的圖書的大量藏書,我們已經(jīng)完全沒有那么多的時間和精力去看完所有的書來尋找自己想要得到的知識,所以一個有專屬個性的、合適的推薦系統(tǒng)能給我們節(jié)約不少的時間和精力。1.1 應(yīng)用背景互聯(lián)網(wǎng)的出現(xiàn)和普及給用戶帶來了大量的信息,滿足了用戶在信息時代對信息的需求,但隨著網(wǎng)絡(luò)的迅速發(fā)展而帶來的網(wǎng)上信息量的大幅增長,使得用戶在面對大量信息時無法從中獲得對自己真正有用的那部分信息,對信息的使用效率反而降低了,這就是所謂的信息超載問題。解決信息超載問題一個非常有潛力的
12、辦法是推薦系統(tǒng) ,它是根據(jù)用戶的信息需求、興趣等,將用戶感興趣的信息、產(chǎn)品等推薦給用戶的個性化信息推薦系統(tǒng)。和搜索引擎相比推薦系統(tǒng)通過研究用戶的興趣偏好,進(jìn)行個性化計算,由系統(tǒng)發(fā)現(xiàn)用戶的興趣點,從而引導(dǎo)用戶發(fā)現(xiàn)自己的信息需求。一個好的推薦系統(tǒng)不僅能為用戶提供個性化的服務(wù),還能和用戶之間建立密切關(guān)系,讓用戶對推薦產(chǎn)生依賴。推薦系統(tǒng)現(xiàn)已廣泛應(yīng)用于很多領(lǐng)域,其中最典型并具有良好的發(fā)展和應(yīng)用前景的領(lǐng)域就是電子商務(wù)領(lǐng)域。同時學(xué)術(shù)界對推薦系統(tǒng)的研究熱度一直很高,逐步形成了一門獨立的學(xué)科。對于我們的圖書的大量藏書,我們已經(jīng)沒有那么多的時間和精力去看完所有的書來尋找自己想要得到的知識,所以一個有專屬個性的、合
13、適的推薦系統(tǒng)能給我們節(jié)約不少的時間和精力。1.2 系統(tǒng)功能該系統(tǒng)的具體功能如下1. 根據(jù)用戶的借書證號給出專屬推薦2. 根據(jù)書目的主鍵值給出相關(guān)推薦3. 推薦的書目中包含書名,作者,出版社,出版日期,索書號,類型等字段4. 可以查詢用戶的信息,以及當(dāng)前書目的信息1.3 系統(tǒng)預(yù)覽圖1-1 系統(tǒng)主界面圖圖1-2 系統(tǒng)副界面圖1.4 系統(tǒng)特點系統(tǒng)界面相對簡單,適合添加到web應(yīng)用程序,作為Applet嵌入到網(wǎng)頁中,但是內(nèi)部數(shù)據(jù)的運算量相當(dāng)大,因此可能運行較緩慢。第2章 開發(fā)環(huán)境及工具2.1系統(tǒng)開發(fā)環(huán)境服務(wù)器操作系統(tǒng):Microsoft Windows操作系統(tǒng)數(shù)據(jù)庫:SQL Server 2008R軟
14、件:R 3.1.2JDK:1.62.2系統(tǒng)架構(gòu)模型本系統(tǒng)整體框架采用了數(shù)據(jù)存儲、大規(guī)模計算與前端展示相分離的新型設(shè)計模式。其中SQL Server 2008 負(fù)責(zé)數(shù)據(jù)的存儲與管理,R軟件負(fù)責(zé)大規(guī)模數(shù)據(jù)計算,是系統(tǒng)的核心部分,Java端采用模型-視圖-控制器(MVC)設(shè)計模型,完成數(shù)據(jù)計算結(jié)果的展示。具體的模型設(shè)計如下圖: Java前端結(jié)果展示參數(shù)傳遞R軟件數(shù)據(jù)抽取數(shù)據(jù)存儲數(shù)據(jù)庫圖2-1 程序結(jié)構(gòu)圖2.3系統(tǒng)開發(fā)技術(shù)2.3.1 R語言簡介R是用于統(tǒng)計分析、繪圖的語言和操作環(huán)境。R是屬于GNU系統(tǒng)的一個自由、免費、源代碼開放的軟件,它是一個用于統(tǒng)計計算和統(tǒng)計制圖的優(yōu)秀工具。R是一套完整的數(shù)據(jù)處理、
15、計算和制圖軟件系統(tǒng)。其功能包括:數(shù)據(jù)存儲和處理系統(tǒng);數(shù)組運算工具,其向量、矩陣運算方面功能尤其強大;完整連貫的統(tǒng)計分析工具;優(yōu)秀的統(tǒng)計制圖功能;簡便而強大的編程語言:可操縱數(shù)據(jù)的輸入和輸出,可實現(xiàn)分支、循環(huán),用戶可自定義功能。與其說R是一種統(tǒng)計軟件,還不如說R是一種數(shù)學(xué)計算的環(huán)境,因為R并不是僅僅提供若干統(tǒng)計程序、使用者只需指定數(shù)據(jù)庫和若干參數(shù)便可進(jìn)行一個統(tǒng)計分析。R的思想是:它可以提供一些集成的統(tǒng)計工具,但更大量的是它提供各種數(shù)學(xué)計算、統(tǒng)計計算的函數(shù),從而使使用者能靈活機動的進(jìn)行數(shù)據(jù)分析,甚至創(chuàng)造出符合需要的新的統(tǒng)計計算方法。該語言的語法表面上類似 C,但在語義上是函數(shù)設(shè)計語言(functi
16、onal programming language)的變種并且和Lisp以及APL有很強的兼容性。特別的是,它允許在“語言上計算”(computing on the language)。這使得它可以把表達(dá)式作為函數(shù)的輸入?yún)?shù),而這種做法對統(tǒng)計模擬和繪圖非常有用。2.3.2數(shù)據(jù)庫技術(shù)簡介SQL Server是由Microsoft開發(fā)和推廣的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同開發(fā)的,并于1988年推出了第一個OS/2版本。 SQL Server近年來不斷更新版本,1996年,Microsoft 推出了SQL Server
17、6.5版本;1998年,SQL Server 7.0版本和用戶見面;SQL Server 2000是Microsoft公司于2000年推出的最新版本。 SQL Server 特點:1真正的客戶機/服務(wù)器體系結(jié)構(gòu)。 2圖形化用戶界面,使系統(tǒng)管理和數(shù)據(jù)庫管理更加直觀、簡單。 3豐富的編程接口工具,為用戶進(jìn)行程序設(shè)計提供了更大的選擇余地。 4SQL Server與Windows NT完全集成,利用了NT的許多功能,如發(fā)送和接受消息,管理登錄安全性等。SQL Server也可以很好地與Microsoft BackOffice產(chǎn)品集成。 5具有很好的伸縮性,可跨越從運行Windows 95/98的電腦到
18、運行Windows 2000的大型多處理器等多種平臺使用。 6對Web技術(shù)的支持,使用戶能夠很容易地將數(shù)據(jù)庫中的數(shù)據(jù)發(fā)布到Web頁面上。 7SQL Server提供數(shù)據(jù)倉庫功能,這個功能只在Oracle和其他更昂貴的DBMS中才有。2.3.3 Java簡介Java是由Sun Microsystems公司推出的Java面向?qū)ο蟪绦蛟O(shè)計語言(以下簡稱Java語言)和Java平臺的總稱。由James Gosling和同事們共同研發(fā),并在1995年正式推出。Java最初被稱為Oak,是1991年為消費類電子產(chǎn)品的嵌入式芯片而設(shè)計的。1995年更名為Java,并重新設(shè)計用于開發(fā)Internet應(yīng)用程序。
19、用Java實現(xiàn)的Hot Java瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺、動態(tài)Web、Internet計算。從此,Java被廣泛接受并推動了Web的迅速發(fā)展,常用的瀏覽器均支持Java applet。另一方面,Java技術(shù)也不斷更新。Java自面世后就非常流行,發(fā)展迅速,對C+語言形成有力沖擊。在全球云計算和移動互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢和廣闊前景。2010年Oracle公司收購Sun Microsystems。Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言。Java 技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應(yīng)用于個人PC、
20、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計算機、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。第3章 系統(tǒng)設(shè)計與數(shù)據(jù)庫3.1系統(tǒng)設(shè)計3.1.1 系統(tǒng)功能模塊劃分1. 用戶借書證號的查詢:包括個人信息以及推薦書目(專屬推薦)。2. 書目編號查詢:包括本書的相關(guān)信息以及關(guān)于本書的推薦。 3.2數(shù)據(jù)庫結(jié)構(gòu)歷史數(shù)據(jù)來源于華北科技學(xué)院圖書館,數(shù)據(jù)處理中需要的表有流通日志表、讀者信息表、書目信息表,詳細(xì)字段含義如下:表3-1 流通日志表comLog流通日志表條形碼barCode流通號comNum讀者條碼readerNum處理時間handleTime主鍵碼keyNum表4-2 讀者信息表reader讀者信息表讀
21、者條碼readerNum姓名rName性別sex讀者級別rRank讀者單位rUnit班級rClass年級rGrade表4-2 書目信息表book書目信息表主鍵碼keyNum題目title責(zé)任者author出版社press出版日期pubDate索書號indexNum圖書類型bType第4章 K最近鄰分類(Knn)算法介紹4.1 Knn算法簡介鄰近算法,或者說K最近鄰(Knn,k-NearestNeighbor)分類算法是數(shù)據(jù)挖掘分類技術(shù)中最簡單的方法之一。所謂K最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。Knn算法的核心思想是如果一個樣本在特征空間中的k個最
22、相鄰的樣本中的大多數(shù)屬于某一個類別,則該樣本也屬于這個類別,并具有這個類別上樣本的特性。該方法在確定分類決策上只依據(jù)最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。 kNN方法在類別決策時,只與極少量的相鄰樣本有關(guān)。由于Knn方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對于類域的交叉或重疊較多的待分樣本集來說,Knn方法較其他方法更為適合。4.2 算法流程1. 準(zhǔn)備數(shù)據(jù),對數(shù)據(jù)進(jìn)行預(yù)處理2. 選用合適的數(shù)據(jù)結(jié)構(gòu)存儲訓(xùn)練數(shù)據(jù)和測試元組3. 設(shè)定參數(shù),如k4.維護(hù)一個大小為k的的按距離由大到小的優(yōu)先級隊列,用于存儲最近鄰訓(xùn)練元組。隨機從訓(xùn)練元組中選取k個元組
23、作為初始的最近鄰元組,分別計算測試元組到這k個元組的距離,將訓(xùn)練元組標(biāo)號和距離存入優(yōu)先級隊列5. 遍歷訓(xùn)練元組集,計算當(dāng)前訓(xùn)練元組與測試元組的距離,將所得距離L 與優(yōu)先級隊列中的最大距離Lmax6. 進(jìn)行比較。若L=Lmax,則舍棄該元組,遍歷下一個元組。若L Lmax,刪除優(yōu)先級隊列中最大距離的元組,將當(dāng)前訓(xùn)練元組存入優(yōu)先級隊列。7. 遍歷完畢,計算優(yōu)先級隊列中k 個元組的多數(shù)類,并將其作為測試元組的類別。8. 測試元組集測試完畢后計算誤差率,繼續(xù)設(shè)定不同的k值重新進(jìn)行訓(xùn)練,最后取誤差率最小的k 值。4.3 算法優(yōu)缺點4.3.1 優(yōu)點1.簡單,易于理解,易于實現(xiàn),無需估計參數(shù),無需訓(xùn)練。2.
24、 適合對稀有事件進(jìn)行分類。3.特別適合于多分類問題(multi-modal,對象具有多個類別標(biāo)簽), kNN比SVM的表現(xiàn)要好。4.3.2 缺點該算法在分類時有個主要的不足是,當(dāng)樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導(dǎo)致當(dāng)輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本占多數(shù)。 該算法只計算“最近的”鄰居樣本,某一類的樣本數(shù)量很大,那么或者這類樣本并不接近目標(biāo)樣本,或者這類樣本很靠近目標(biāo)樣本。無論怎樣,數(shù)量并不能影響運行結(jié)果。該方法的另一個不足之處是計算量較大,因為對每一個待分類的文本都要計算它到全體已知樣本的距離,才能求得它的K個最近鄰點。第5章 Knn算法在
25、圖書推薦系統(tǒng)的實現(xiàn)5.1 訓(xùn)練集數(shù)據(jù)train.data以表5-1所示的華北科技學(xué)院圖書借閱記錄的用戶借閱行為,作為推薦系統(tǒng)的訓(xùn)練集數(shù)據(jù)。表5-1 數(shù)據(jù)集barCodecomNumreaderNumhandleTimekeyNum A2006/9/5 0:00 A2006/9/5 0:00 A2006/9/5 0:0047478 A2006/9/5 0:0095171 A2006/9/5 0:00 A2006/9/5 0:00 A2006/9/5 0:00 A2006/9/5 0:00 A2006/9/6 0:00 A2006/9/6 0:00 A2006/9/6 0:0082555 A200
26、6/9/6 0:00 A2006/9/6 0:0095871其中readerNum(讀者編號)和keyNum(書目主鍵)是相關(guān)性計算的主要數(shù)據(jù)依據(jù)。下面將上述數(shù)據(jù)通過SQL Server 2008數(shù)據(jù)庫讀取到R軟件中,然后存放于train.data數(shù)據(jù)框中,具體代碼如下:library(RODBC)odbcDataSources()conn=odbcConnect(library)sql=select readerNum,keyNum from comLogtrain.data=sqlQuery(conn,sql)names(train.data)=c(reader,book)odbcClos
27、e(conn)其中,前3行樣本數(shù)據(jù)如下所示:train.data1:3, reader book1 A 2 A 690453 A 828795.2建立讀者-書目矩陣現(xiàn)在要把常規(guī)的train.data 形式的矩陣轉(zhuǎn)換為列代表不同書目,行代表不同讀者,內(nèi)部代表是否進(jìn)行過借閱的矩陣,即每列代表某一本書被哪些讀者借閱過,每行代表每一讀者借閱過的書目。具體數(shù)據(jù)如表5-2所示:表5-2 讀者-書目矩陣669232482009462989510515108651100711304A000000000A000000000A100100000A000010010A000010000A000000000A0000
28、00000A001000000A000000010實現(xiàn)代碼如下:library(reshape)user.item.matrix=cast(train.data,readerbook,value=value,fill=0,fun.aggregate=length) s(user.item.matrix)=user.item.matrix,1 user.item.matrix=user.item.matrix,-1這里的核心函數(shù)是reshape包里的cast函數(shù),如下代碼執(zhí)行后會返回行代表的用戶。user.item.matrix=cast(train.data,readerboo
29、k,value=value,fill=0,fun.aggregate=length)其中列代表書目(readerbook),元素內(nèi)容是value,默認(rèn)值NA自動使用0替換(fill=0),以代表讀者沒有借入過該書目,首列數(shù)據(jù)(reader)是代表用戶的讀者編號,首列數(shù)據(jù)是代表書目的鍵值編號。5.3計算書目距離矩陣distance這里使用書目之間的相關(guān)性系數(shù)來間接計算書目的距離矩陣。例如,user.item.matrix矩陣中的第1列和第3列分別代表書目669和書目8200被用戶借閱的情況,其相關(guān)性系數(shù)的計算方式代碼如下:sim_cor=cor(user.item.matrix,1 , user
30、.item.matrix,3);sim_cor的取值范圍是-1,1這里使用如下規(guī)則把sim_cor轉(zhuǎn)換為distance1. 當(dāng)sim_cor的取值為-1時,distance=inf無限大2. 當(dāng)sim_cor的取值為1是,distance=0具體計算實現(xiàn)的方式代碼如下:distance=-log(sim_cor/2)+0.5)最后把distance矩陣的行名稱和列名稱設(shè)置為書目鍵值,以便可以在后續(xù)程序中的distance矩陣中定位出實際的視頻數(shù)據(jù)。colnames(distance)=colnames(user.item.matrix)rownames(distance)=colnames(
31、user.item.matrix)5.4計算讀者和書目的關(guān)系程度自定義的Knn.userid.item函數(shù)是算法的核心,它主要計算讀者reader和書目itemid的相關(guān)程度。通過distance物品間的距離矩陣,可以形象的得到一個書目二維平面分布圖。如圖5-4所示:圖5-1 讀者和書目的關(guān)系程度 其中,各個書目的分布位置由distance得出,各類點上的取值由讀者-書目矩陣user.item.matrix得出,分類取值0,表示未曾借閱,分類取值1表示借閱過這本書。然后根據(jù)Knn算法思想找出商品最近的K個物品,圖示中的K取值為3。最后計算書目取值只和,并除以K,從而代表讀者reader和書目b
32、ook之間的關(guān)系。代碼如下:knn.userid.item=function(userid,itemid,user.item.matrix,distance,k=25) item.index=which(rownames(distance)=as.character(itemid) k.nearest.item.index=order(distanceitem.index,)2:(k+1) k.nearest.itemid=as.numeric(rownames(distance)k.nearest.item.index) sum(user.item.matrixas.character(us
33、erid),as.character(k.nearest.itemid)/k下面通過distance書目距離矩陣找到與itemid距離最近的K個物品:1. 查找名稱是itemid的物品在distance的序列號item.index。代碼如下:item.index=which(rownames(distance)=as.character(itemid)2. 如果order()可以返回向量a的取值由小到大排序后元素的序列號信息,則語句如下:k.nearest.item.index=order(distanceitem.index,)2:(k+1)上述語句可以返回distanceitem.inde
34、x,中最小的第2至k+1元素的序列號。這里由于distance與itemid距離最近的書目還是itemid,所以這里取第2至k+1元素。3. 使用k.nearest.index反查出物品id,代碼如下k.nearest.itemid=as.numeric(rownames(distance)k.nearest.item.index)4. 使用讀者-書目距離矩陣user.item.matrix來計算距離最近的K個物品有多少個被借閱,再除以K得到一個處于0,1之間的數(shù)據(jù),用以表明讀者和書目的關(guān)系,代碼如下所示:sum(user.item.matrixas.character(userid),as.
35、character(k.nearest.itemid)/k5.5計算用戶的推薦書目id使用自定義的核心函數(shù)knn.userid.item,可以計算用戶userid與所有的商品的關(guān)系數(shù)據(jù),并可以取關(guān)系最大的書目,作為該用戶的推薦書目。該過程實際上就是在上述書目平面分布圖中,查找周圍書目與之最近的k個物品中取值為1的最多的書目。例如在圖5-2中,取值為零的書目,周圍的k個物品的分類取值1占多數(shù),所以它就被作為一款推薦書目。圖5-2 用戶推薦書目示意圖 該過程涉及的代碼如下:knn.itembase=function(userid,user.item.matrix,distance,k=25,ret
36、urn.item.num=10) knn.userid=0 for(i in 1:nrow(distance) knn.useridi=knn.userid.item(userid,rownames(distance)i,user.item.matrix,distance,k=k) return.itemid=rownames(distance)order(knn.userid,decreasing=T) return.itemid=setdiff(return.itemid,colnames(user.item.matrix)which(user.item.matrixas.characte
37、r(userid),!=1) return.itemid1:return.item.num代碼中的knn.userid用于存儲用戶userid和所有書目的關(guān)系數(shù)據(jù),然后依據(jù)knn.userid取值由大到小的順序進(jìn)行排序,然后返回其編號。代碼如下return.itemid=rownames(distance)order(knn.userid,decreasing=T) 然后使用如下語句找到已被用戶收藏的書目的itemid:colnames(user.item.matrix)which(user.item.matrixas.character(userid), !=1)再從上面的return.it
38、emid中提取出已經(jīng)借閱過的書目的信息。代碼如下:return.itemid=setdiff(return.itemid,colnames(user.item.matrix)which(user.item.matrixas.character(userid),!=1)最后依據(jù)推薦書目數(shù),來返回最后為用戶userid推薦的return.itemid個書目itemid。5.6 查詢推薦書目的具體信息根據(jù)上述步驟計算出的用戶推薦書目id,在數(shù)據(jù)庫中查找出推薦書目的具體信息,返回給用戶,給用戶提取出一些有用的信息,方便用戶對推薦書目的了解以及在圖書館的檢索。代碼如下:recFromPerson=fun
39、ction(readerNum,user.item.matrix1=user.item.matrix,distance1=distance) library(RODBC) odbcDataSources() conn=odbcConnect(library) result= rec=knn.itembase(readerNum,user.item.matrix1,distance1,k=25,return.item.num=10) rec=na.omit(rec)#缺失值處理 for(i in 1:length(rec) sql.rec=paste(select * from GDLIS.bo
40、ok where keyNum=,reci) result=rbind(result,sqlQuery(conn,sql.rec) odbcClose(conn) na.omit(result)在數(shù)據(jù)庫中返回的信息有圖書的標(biāo)題,作者,出版社,出版日期,檢索號等等信息。方便用戶對推薦書目的了解和查找。其中na.omit(result),用于去空操作。第6章 SQL Server數(shù)據(jù)庫、Java語言與R的組合6.1 簡述R是屬于GNU系統(tǒng)的一個自由、免費、源代碼開放的軟件,它是一個用于統(tǒng)計計算和統(tǒng)計制圖的優(yōu)秀工具。R擁有一套完整的數(shù)據(jù)處理、計算和制圖軟件系統(tǒng)。其功能包括:數(shù)據(jù)存儲和處理系統(tǒng);數(shù)組運
41、算工具,其向量、矩陣運算方面功能尤其強大;完整連貫的統(tǒng)計分析工具;優(yōu)秀的統(tǒng)計制圖功能;簡便而強大的編程語言。SQLServer數(shù)據(jù)庫提供大量數(shù)據(jù)的存儲以及一些復(fù)雜的數(shù)據(jù)整理合并等。Java 技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應(yīng)用于個人PC、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計算機、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群,同時適用于開發(fā)各種良好的圖形界面。而數(shù)據(jù)從存儲到大規(guī)模計算,再到計算結(jié)果展示,這三者的組合剛好迎合了數(shù)據(jù)的一條龍式的發(fā)展與應(yīng)用。我相信這必將是大數(shù)據(jù)時代的一個利器。6.2 SQL Server數(shù)據(jù)庫與R語言R語言提供了RODBC包,用于基于數(shù)據(jù)源的數(shù)
42、據(jù)庫連接,下面一個例子簡單說明數(shù)據(jù)庫的連接:library(RODBC)odbcDataSources()conn=odbcConnect(library)sql=select readerNum,keyNum from comLogtrain.data=sqlQuery(conn,sql)names(train.data)=c(reader,book)odbcClose(conn)其中conn=odbcConnect(library)用于數(shù)據(jù)源的連接,train.data=sqlQuery(conn,sql)用于數(shù)據(jù)的查詢,odbcClose(conn)用于數(shù)據(jù)源連接的關(guān)閉。6.3 R語言與
43、Java語言Java語言提供了R應(yīng)用的REngine.jar和RServerEngine.jar包,用于Java中使用R語言。下面使用簡單的例子來介紹RSever的使用:1. 需要在R軟件中下載RServe包,然后加載包,調(diào)用函數(shù)啟動RServe2. 在Java端導(dǎo)入REngine.jar和RServerEngine.jar3. 在Java端應(yīng)用如下函數(shù)this.rc=new RConnection();rc.eval(source(H:/BCS.R);String s=recResult=recFromPerson(+readerNum+);System.out.println(讀取代碼);
44、rc.voidEval(s);REXP title=rc.eval(iconv(recResult$titile, gbk, utf-8,);其中this.rc=new RConnection()用于R服務(wù)器的連接,rc.eval(source(H:/BCS.R)用于加載R代碼,rc.voidEval(s)用于在R服務(wù)器端運行R代碼,REXP title=rc.eval(iconv(recResult$titile, gbk, utf-8,)用于數(shù)據(jù)的返回,其中的iconv函數(shù)用于編碼的轉(zhuǎn)換,否則可能在傳輸過程中出現(xiàn)亂碼現(xiàn)象。參考文獻(xiàn)1王珊.數(shù)據(jù)庫與數(shù)據(jù)庫管理系統(tǒng).第1版.北京:電子工業(yè)出版社
45、,19952趙子江,王丹.數(shù)據(jù)庫原理與SQL SERVER應(yīng)用.第2版.北京:機械工業(yè)出版社,20063張丹.R的極客理想-工具篇.第1版.北京:機械工業(yè)出版社,20144李明.R語言與網(wǎng)站分析.第1版.北京:機械工業(yè)出版社,20145Yanchang Zhao. R and Data Mining Examples and Case Studies.第1版.北京:機械工業(yè)出版社,20146耿祥義,張躍平,Java大學(xué)實用教程.第3版.北京:電子工業(yè)出版社,2013致謝在本文結(jié)束之際,我要特別感謝我的指導(dǎo)老師譚立云老師。譚老師學(xué)識淵博、為人真誠,他在我大學(xué)學(xué)習(xí)期間給了我許多教誨。本文從選題的確
46、定,論文的寫作、修改到最后定稿得到了譚老師的悉心指導(dǎo),提出了許多寶貴建議,而且提供了大量的書籍資料。特別是他多次主動詢問進(jìn)程,為我指點迷津,幫助我開拓思路,精心點撥,熱忱鼓勵。他嚴(yán)肅的教學(xué)態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神,精益求精的工作作風(fēng)深深地感染和激勵著我,使我終身受益。在此,謹(jǐn)向譚老師致以誠摯的謝意和崇高的敬意。此外,感謝其他諸位老師的諄諄教導(dǎo),感謝譚立云老師對我學(xué)習(xí)上的點撥。同時,還要感謝在大學(xué)四年中所有幫助我的人,也要感謝在論文寫作過程中,幫助過我、并且共同奮斗四年的大學(xué)同學(xué)們,與他們的討論和他們提出的諸多建議幫助我解決了很多難題,使得論文能夠順利完成。衷心感謝我的家人。在漫長的求學(xué)生涯中,我的
47、每一份成長和進(jìn)步都離不開他們的支持。另外,需要感謝一個素未謀面的老師,也就是R的極客理想工具篇的作者,張丹老師。感謝他通過郵件給予的悉心指導(dǎo)。最后,再次衷心地向所有在我論文寫作過程中給予過我支持、幫助與關(guān)懷的各位老師、同學(xué)、親友表以誠摯的謝意!附錄1.R代碼library(RODBC)odbcDataSources()conn=odbcConnect(library)sql=select readerNum,keyNum from comLogtrain.data=sqlQuery(conn,sql)names(train.data)=c(reader,book)odbcClose(conn)
48、train.data=train.data1:1000,#數(shù)據(jù)處理value=rep(1,length(train.data$reader)train.data=cbind(train.data,value)library(reshape)user.item.matrix=cast(train.data,readerbook,value=value,fill=0,fun.aggregate=length)#重點代碼s(user.item.matrix)=user.item.matrix,1 user.item.matrix=user.item.matrix,-1#用book之間
49、的相關(guān)系數(shù),計算距離矩陣sim_cor=cor(user.item.matrix)distance=-log(sim_cor/2)+0.5)colnames(distance)=colnames(user.item.matrix)rownames(distance)=colnames(user.item.matrix)#計算用戶和物品的關(guān)系成度knn.userid.item=function(userid,itemid,user.item.matrix,distance,k=25) item.index=which(rownames(distance)=as.character(itemid)
50、 k.nearest.item.index=order(distanceitem.index,)2:(k+1) k.nearest.itemid=as.numeric(rownames(distance)k.nearest.item.index) sum(user.item.matrixas.character(userid),as.character(k.nearest.itemid)/k#計算書目關(guān)系程度。knn.book.item=function(itemid,user.item.matrix,distance,k=10) item.index=which(rownames(dista
51、nce)=as.character(itemid) k.nearest.item.index=order(distanceitem.index,)2:(k+1) k.nearest.itemid=as.numeric(rownames(distance)k.nearest.item.index) k.nearest.itemid#選拔最近距離knn.itembase=function(userid,user.item.matrix,distance,k=25,return.item.num=10) knn.userid=0 for(i in 1:nrow(distance) knn.useri
52、di=knn.userid.item(userid,rownames(distance)i,user.item.matrix,distance,k=k) return.itemid=rownames(distance)order(knn.userid,decreasing=T)#itemid的反向查找,值得考慮(向量排序之后,它的索引號是不變的)return.itemid=setdiff(return.itemid,colnames(user.item.matrix)which(user.item.matrixas.character(userid),!=1) return.itemid1:r
53、eturn.item.num#熱門書籍hotbook=function() library(RODBC) odbcDataSources() conn=odbcConnect(library) hotbookmsg=c() sql.hotbookid=select keyNum,count(*)amount from comLog group by keyNum order by count(*) desc hotbookid=sqlQuery(conn,sql.hotbookid) for(i in 1:10) sql.getbook=paste(select * from GDLIS.book where keyNum=,hotbookid$keyNumi) hotbookmsg=rbind(hotbookmsg,sqlQuery(conn,sql.getbook) odbcClose(conn) na.omit(hotbookmsg)#根據(jù)書籍名稱推薦recFromBook=function(bName,user.item.matrix,distan
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年工業(yè)互聯(lián)網(wǎng)平臺計算機視覺缺陷檢測技術(shù)在食品工業(yè)中的應(yīng)用解決方案報告
- 高純度氣體輸送系統(tǒng)企業(yè)制定與實施新質(zhì)生產(chǎn)力項目商業(yè)計劃書
- 2025-2030中國自動售貨機行業(yè)市場發(fā)展現(xiàn)狀及發(fā)展趨勢與投資前景預(yù)測研究報告
- 2025年文化遺產(chǎn)數(shù)字化保護(hù)與利用中的數(shù)字文化遺產(chǎn)保護(hù)與文化遺產(chǎn)地保護(hù)報告
- 2025年城市生活垃圾分類處理公眾參與度分析與長效機制構(gòu)建實踐報告
- 2025-2030中國綠茶行業(yè)市場深度調(diào)研及發(fā)展趨勢和投資前景預(yù)測研究報告
- 2025-2030中國纖維針織衫行業(yè)市場運行分析及發(fā)展趨勢與投資研究報告
- 2025-2030中國硫鎂磷肥行業(yè)供需趨勢及投資風(fēng)險研究報告
- 新城區(qū)行政中心建設(shè)2025年社會穩(wěn)定風(fēng)險評估與風(fēng)險溝通策略報告
- 四年級下冊數(shù)學(xué)試題-第八單元平均數(shù)與條形統(tǒng)計圖單元檢測試題B卷人教版(含答案)
- GB/T 45072-2024自然保護(hù)地名詞術(shù)語
- 漁船輪機管理考試復(fù)習(xí)題及答案
- 品管圈PDCA改善案例-降低住院患者跌倒發(fā)生率
- 汽車美容服務(wù)質(zhì)量管理制度
- 2024年廣東潮州中考物理一模試題 (含答案)
- 中國文化概況chapter-1
- 2024年中職高考數(shù)學(xué)計算訓(xùn)練 專題13 數(shù)列的相關(guān)計算
- ISO22716-執(zhí)行標(biāo)準(zhǔn)化妝品良好操作規(guī)范GMPC標(biāo)準(zhǔn)及內(nèi)審員培訓(xùn)教材
- 2024年全國高考數(shù)學(xué)試題及解析答案(新課標(biāo)Ⅱ卷)
- 工程造價咨詢服務(wù)投標(biāo)方案(技術(shù)方案)
- 四川省宜賓市2024年小升初語文真題試卷及答案
評論
0/150
提交評論