亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Python的協(xié)同過濾算法的設(shè)計與實現(xiàn)

        2019-04-19 03:11:14,
        山東開放大學學報 2019年2期
        關(guān)鍵詞:用戶信息

        ,

        (1.濟南職業(yè)學院,山東 濟南 250014;2.山東廣播電視大學,山東 濟南 250014)

        一、引言

        隨著網(wǎng)絡(luò)的飛速發(fā)展,網(wǎng)絡(luò)信息飛速增長,人們面臨著“信息過載”和“信息迷航”的問題。借助于搜索引擎,人們可以從海量信息中查找到自己所需的信息。但是,搜索引擎只適用于在有明確需求的情況下幫人們查找信息,如果在沒有明確需求的情況下,搜索引擎則難以幫助人們有效地篩選信息。此時推薦技術(shù)應(yīng)運而生,它通過研究用戶的興趣偏好,自動建立起用戶和信息之間的聯(lián)系,從而幫助用戶從海量信息中去發(fā)掘自己潛在的需求。

        推薦系統(tǒng)是建立在海量數(shù)據(jù)挖掘基礎(chǔ)上的,它通過分析用戶的歷史數(shù)據(jù)來了解用戶的需求和興趣,從而將用戶感興趣的信息、物品等主動推薦給用戶,其本質(zhì)是建立用戶與物品之間的聯(lián)系。常用的推薦算法主要有專家推薦、基于統(tǒng)計的推薦、基于內(nèi)容的推薦和協(xié)同過濾推薦等。其中協(xié)同過濾推薦是推薦系統(tǒng)中應(yīng)用最早和最為成功的算法。

        協(xié)同過濾算法的關(guān)鍵是計算相似度及求解推薦評分,在計算時需要用到矩陣的一些運算。Python的第三方擴展庫Numpy是一科學計算庫,提供了大量的數(shù)組及矩陣運算,因此很多推薦系統(tǒng)中都是利用Numpy來實現(xiàn)協(xié)同過濾算法,但因協(xié)同過濾算法中涉及到的矩陣多是稀疏矩陣,采用普通的二維數(shù)組存放存在大量的無效存儲,空間利用率較低,同時利用Numpy擴展庫也無法進行算法的優(yōu)化,因此本文利用Python的內(nèi)置序列字典來存放稀疏矩陣,自行編制相應(yīng)的代碼來求解推薦評分,可有效提高算法的時間空間效率。

        二、協(xié)同過濾算法

        協(xié)同過濾算法分為基于用戶的協(xié)同過濾算法和基于物品的協(xié)同過濾算法。

        基于用戶的協(xié)同過濾算法(簡稱UserCF),通過不同用戶對物品的評分來評測用戶之間的相似性,基于用戶之間的相似性做出推薦。簡單說就是給用戶推薦和他興趣相似的其他用戶喜歡的物品。

        基于物品的協(xié)同過濾算法(簡稱ItemCF),通過用戶對不同物品的評分來評測物品之間的相似性,基于物品之間的相似性做出推薦。簡單說就是給用戶推薦和他之前喜歡的物品相似的物品。

        UserCF算法和ItemCF算法最主要的區(qū)別在于:UserCF推薦的是那些和目標用戶有共同興趣愛好的其他用戶所喜歡的物品,ItemCF算法則推薦那些和目標用戶之前喜歡的物品類似的其他物品。因此,UserCF算法的推薦更偏向社會化,適合應(yīng)用于新聞推薦、微博話題推薦等應(yīng)用場景;而ItemCF算法的推薦則是更偏向于個性化,適合應(yīng)用于電子商務(wù)、電影、圖書等應(yīng)用場景。

        UserCF算法和ItemCF算法思想類似,其實現(xiàn)過程也基本類似,唯一不同的是一個是計算用戶相似度,一個是計算物品相似度,本文以ItemCF算法為例詳細說明其具體實現(xiàn)。

        三、ItemCF的Python實現(xiàn)

        (一)數(shù)據(jù)準備

        以一組用戶的觀影記錄作為測試數(shù)據(jù)集,共包括兩個數(shù)據(jù)文件,一個是rating.txt,存放的是用戶對電影的評分記錄,其數(shù)據(jù)如圖1所示,每一行用逗號分隔的3個數(shù)據(jù)項分別表示用戶ID、電影ID和評分。

        圖1 評分數(shù)據(jù)

        另一個數(shù)據(jù)文件是movies.txt,存放的是電影信息,其數(shù)據(jù)如圖2所示,每一行用逗號分隔的3個數(shù)據(jù)項分別表示電影ID、電影名稱和上映時間,該數(shù)據(jù)文件主要用于推薦結(jié)果輸出。

        圖2 電影信息數(shù)據(jù)

        (二)具體實現(xiàn)過程

        1.數(shù)據(jù)預處理

        將數(shù)據(jù)集中的文件讀入并進行一定的處理,將用戶評分記錄及電影信息分別存入相應(yīng)的字典中。其Python代碼如圖3所示。

        圖3 數(shù)據(jù)預處理代碼

        2.建立同現(xiàn)矩陣

        ItemCF算法的關(guān)鍵是計算物品(此處為電影)的相似度,相似度的計算方法有很多,在此直接以同時出現(xiàn)的次數(shù)多少作為相似度的衡量,因此需要建立物品的同現(xiàn)矩陣M。

        建立過程如下:

        step1:列出每個用戶看過的電影列表,結(jié)果如圖4所示。

        圖4 用戶看過的電影列表

        step2:求出每個用戶的電影同現(xiàn)矩陣

        例對用戶1,其看過的電影有11、12、13,因此在矩陣對應(yīng)的位置(11,12)(12,11)(11,13)(13,11)(12,13)(13,12)處寫上1,其余為0。也即用戶1的同現(xiàn)矩陣如圖5所示。

        圖5 用戶1的同現(xiàn)矩陣

        step3:將所有用戶的同現(xiàn)矩陣相加,得到最終的同現(xiàn)矩陣,如圖6所示。

        圖6 所有用戶的同現(xiàn)矩陣

        利用Python來實現(xiàn)同現(xiàn)矩陣的建立,其代碼如圖7所示。

        圖7 求解電影同現(xiàn)矩陣

        3.計算推薦評分

        計算每個用戶曾看過的電影的推薦評分。推薦評分=同現(xiàn)矩陣M*評分向量R。

        評分向量即用戶對所有物品(電影)的評分,由評分記錄表可得出。

        由前面計算出的同現(xiàn)矩陣和用戶1的評分向量可得出用戶1對電影104的推薦評分為:

        U1:14=4.5*3+3.5*1=17

        具體求解方法如圖8所示。

        用戶ID電影ID1用戶評分電影ID2電影ID1與電影ID2的關(guān)聯(lián)權(quán)重得分=用戶評分?電影ID1與電影ID2的關(guān)聯(lián)權(quán)重1114.51434.5?3=13.51123.51413.5?1=3.511331400114014001150141011601430總分=13.5+3.5=17

        圖8推薦評分求解過程

        同樣方法可求得每個用戶對未曾看過的電影的推薦評分,其結(jié)果如圖9所示。圖中陰影部分為每個用戶未曾看過的電影中推薦評分最高的,也是要推薦的結(jié)果。

        然后將推薦得分從高到低排序,實際應(yīng)用中通常采用Top-N推薦,即為目標用戶提供一個長度為N的推薦列表,使該推薦列表能夠盡量滿足用戶的興趣和需求。利用Python來計算推薦評分的代碼如圖10所示。

        圖9 所有用戶對未曾觀看的電影的推薦得分

        圖10 求解推薦評分

        4.輸出推薦結(jié)果

        求得推薦評分的前N項后就可將結(jié)果輸出給用戶。輸出推薦結(jié)果時,有時可能需要為某個指定用戶來輸出推薦結(jié)果,也可能需要為所有用戶都輸出推薦結(jié)果,為使程序更加靈活,可編制兩個不同的函數(shù)來滿足其需求。為一個指定用戶輸出推薦結(jié)果的Python代碼如圖11所示。

        圖11 輸出推薦結(jié)果

        例如要為用戶1推薦兩部電影可直接調(diào)用主函數(shù):main_one(“rates.txt”,“movies.txt”,“1”,2),程序運行結(jié)果如圖12所示,與前面手工計算得出的結(jié)果相同。

        圖12 用戶1的推薦結(jié)果

        若想為每個用戶都輸出其推薦結(jié)果,其相應(yīng)的主函數(shù)代碼如圖13所示。

        圖13 為每個用戶推薦結(jié)果

        如要為每個用戶推薦1部電影,則可直接調(diào)用主函數(shù):main_all(“rates.txt”,“movies.txt”,1),運行結(jié)果如圖14所示。

        圖14 所有用戶的推薦結(jié)果

        其輸出結(jié)果與前面手工求解的結(jié)果完全相同。

        四、分析與測試

        前面給出的測試數(shù)據(jù)集數(shù)據(jù)很少,主要應(yīng)用于系統(tǒng)開發(fā)測試中。實際應(yīng)用中推薦系統(tǒng)所用的數(shù)據(jù)集通常為海量數(shù)據(jù),為驗證系統(tǒng)在海量數(shù)據(jù)中的使用,可以MovieLens(http://grouplens.org/datasets/movielens)作為電影推薦系統(tǒng)中的實驗數(shù)據(jù)來測試系統(tǒng)。MovieLens是GroupLens Research實驗室的一個非商業(yè)性質(zhì)、以研究為目的的實驗性項目,采集了一組從20世紀90年代末到21世紀初的電影評分數(shù)據(jù),包含大小不同的數(shù)據(jù)集,每個數(shù)據(jù)集中包括電影信息數(shù)據(jù)及電影評分記錄等。如MovieLens 1M數(shù)據(jù)集中存放了1000多名用戶對近2000部電影的評分記錄,每個用戶至少對20部電影進行過評分,一共有100000多條電影評分記錄。當數(shù)據(jù)量增大時,存儲同現(xiàn)矩陣所需要的空間也相應(yīng)增加,通過前述也可以看出同現(xiàn)矩陣是一稀疏矩陣,因此采用字典來存儲同現(xiàn)矩陣中的非零元素要比直接存儲整個同現(xiàn)矩陣節(jié)省空間。又因字典是Python的內(nèi)置對象,而numpy是第三方擴展庫,需要安裝和導入相應(yīng)的模塊,因此同一算法采用內(nèi)置對象比用擴展庫會獲得更優(yōu)的時間性能和空間性能。

        五、結(jié)語

        本文利用Python實現(xiàn)的協(xié)同過濾算法框架清晰,代碼簡潔,同時因其用Python的內(nèi)置序列字典代替二維數(shù)組來存放稀疏矩陣,有效提高了算法的時間空間效率。

        猜你喜歡
        用戶信息
        訂閱信息
        中華手工(2017年2期)2017-06-06 23:00:31
        關(guān)注用戶
        商用汽車(2016年11期)2016-12-19 01:20:16
        關(guān)注用戶
        商用汽車(2016年6期)2016-06-29 09:18:54
        關(guān)注用戶
        商用汽車(2016年4期)2016-05-09 01:23:12
        Camera360:拍出5億用戶
        100萬用戶
        如何獲取一億海外用戶
        展會信息
        中外會展(2014年4期)2014-11-27 07:46:46
        信息
        健康信息
        祝您健康(1987年3期)1987-12-30 09:52:32
        亚洲国产成人久久综合一区77| 国产精品国产三级国产专播| 狠狠色噜噜狠狠狠狠米奇777| 国产网站视频| 少妇被日到高潮的视频| 亚洲av老熟女一区二区三区 | 国产日产亚洲系列最新| 一区二区传媒有限公司| 色系免费一区二区三区| 在线观看亚洲视频一区二区| 欧美顶级少妇作爱| 欧美午夜精品一区二区三区电影| 久久精品性无码一区二区爱爱| 丰满人妻一区二区三区52| 国产狂喷水潮免费网站www| 真实单亲乱l仑对白视频| 99re6久精品国产首页 | 极品嫩模大尺度av在线播放| 久久综合国产精品一区二区| 国产人妻大战黑人20p| 亚洲av理论在线电影网| 日日骚一区二区三区中文字幕| 在线天堂av一区二区| 人妻夜夜爽天天爽| 国产精品成人99一区无码| 天天射色综合| 开心五月骚婷婷综合网| 国内成+人 亚洲+欧美+综合在线 | 亚洲第一页在线免费观看| 麻豆精品导航| 野花社区www高清视频| 97无码人妻一区二区三区蜜臀 | 国产亚洲超级97免费视频| 国产精品自在线拍国产| 在线观看国产精品91| 亚洲24小时免费视频| 制服丝袜中文字幕在线| 久久夜色撩人精品国产小说| 久久精品国产只有精品96| 蜜桃视频羞羞在线观看| 一本久道综合在线无码人妻|