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

        ?

        基于Python的用戶協(xié)同過濾推薦系統(tǒng)的研究與實(shí)現(xiàn)

        2020-12-28 11:53:14秦育華
        電腦知識與技術(shù) 2020年31期

        秦育華

        摘要:推薦系統(tǒng)可以有效地幫助用戶從海量信息中獲得自己的潛在需求,為用戶實(shí)現(xiàn)個(gè)性化推薦。本文研究了協(xié)同過濾算法,使用Python語言實(shí)現(xiàn)了基于用戶的協(xié)同過濾推薦系統(tǒng),構(gòu)建了推薦系統(tǒng)的架構(gòu),給出了實(shí)現(xiàn)個(gè)性化推薦的關(guān)鍵代碼,并在ml-latest-small 數(shù)據(jù)集上對用戶相似度算法進(jìn)行了測試。

        關(guān)鍵詞:相似性;協(xié)同過濾;推薦系統(tǒng);Python

        中圖分類號:TP311 ? ? ?文獻(xiàn)標(biāo)識碼:A

        文章編號:1009-3044(2020)31-0234-03

        1 概述

        信息技術(shù)和互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展以及數(shù)據(jù)量爆炸式的增長,將我們帶到了“信息過載”[1]的時(shí)代,使我們難以從海量的數(shù)據(jù)中獲得真正需要的信息。如何從海量信息中找到用戶真正感興趣的信息成為新的難題。傳統(tǒng)搜索引擎主要依賴于用戶對需求的準(zhǔn)確描述,向所有用戶提供相同的推薦結(jié)果,不是個(gè)性化服務(wù)。推薦系統(tǒng)不需要用戶提供明確的需求,它通過分析用戶的歷史行為,挖掘用戶興趣并建模,主動(dòng)為用戶推薦能夠滿足他們興趣和需要的信息[2],能夠有效地為用戶提供個(gè)性化服務(wù)。

        2 推薦系統(tǒng)與相關(guān)技術(shù)

        2.1推薦系統(tǒng)和協(xié)同過濾算法

        推薦系統(tǒng)能夠在信息過載的環(huán)境中,為用戶精確的推薦令他們感興趣的信息。它不僅能夠滿足用戶的個(gè)性化需求,而且能夠增強(qiáng)用戶關(guān)聯(lián)性[3],跟蹤用戶偏好,提高銷售能力。推薦系統(tǒng)通常分為三類:基于內(nèi)容的過濾、協(xié)同過濾和混合推薦。其中,協(xié)同過濾獨(dú)立于資源,且不考慮物品內(nèi)容信息,易于實(shí)現(xiàn),是目前最成功且應(yīng)用最廣的一種推薦算法。

        協(xié)同過濾算法(Collaborative Filtering,CF)是根據(jù)用戶的歷史行為信息,計(jì)算用戶之間的相似度,并推薦用戶喜歡的物品。協(xié)同過濾算法是根據(jù)用戶的相似度,而不是物品的客觀屬性提供個(gè)性化的推薦,因此它可以過濾任何類型的物品,如電影、音樂、文本等。根據(jù)推薦對象的不同,協(xié)同過濾算法分為基于物品的協(xié)同過濾算法和基于用戶的協(xié)同過濾算法。

        2.2基于物品的協(xié)同過濾算法

        基于物品的協(xié)同過濾算法(Item-based collaborative filtering ,Item-base CF)主要考慮用戶的個(gè)性化特征,通過分析用戶的行為數(shù)據(jù),計(jì)算與用戶喜歡的物品之間的相似度,為用戶推薦與其之前感興趣物品相似的新物品。該算法主要包括兩個(gè)步驟:(1)根據(jù)用戶的評分?jǐn)?shù)據(jù),計(jì)算任意兩個(gè)物品之間的相似度;(2)根據(jù)物品間的相似度和用戶的歷史行為,為用戶生成推薦物品列表。

        2.3 基于用戶的協(xié)同過濾算法

        基于用戶的協(xié)同過濾算法(User-based collaborative filtering, User-base CF)由Goldberg等人于1992年提出并用于郵件過濾系統(tǒng)[4]。該算法主要考慮用戶的社會(huì)屬性,通過分析用戶的行為數(shù)據(jù),計(jì)算用戶之間的興趣相似度,為目標(biāo)用戶推薦相似用戶感興趣的物品。該算法主要包括兩個(gè)步驟:(1)找到與目標(biāo)用戶興趣相似的用戶集合;(2)在這個(gè)用戶集合中,找到用戶感興趣的,且目標(biāo)用戶不知道的物品并推薦給目標(biāo)用戶。

        3 基于用戶的協(xié)同過濾推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

        3.1 用戶相似度算法

        相似度的度量在協(xié)同過濾中起著基礎(chǔ)性的作用,如何計(jì)算用戶之間的相似度,是協(xié)同過濾中最關(guān)鍵的問題。常見的計(jì)算用戶相似度的算法有余弦相似度和歐氏距離等。

        1)余弦相似度(Cosine Similarity)

        在協(xié)同過濾的計(jì)算中,余弦相似度將用戶評分看作是n維空間上的向量,通過計(jì)算兩個(gè)向量之間夾角的余弦值,度量兩個(gè)用戶間的相似性,其值域?yàn)閇-1, 1]:1代表夾角為0°, 表示完全相似;-1代表夾角為180°, 表示完全不相似。計(jì)算用戶U和用戶V的相似度公式如下:

        [wuv=|N(u)∩N(v)||N(u)∥N(v)|]

        其中,N(u)和N(V)表示用戶U和用戶V感興趣的物品評分。余弦相似度注重兩個(gè)向量在方向上的差異,而不是距離或長度上的差異,能夠較好地反映用戶間共同的興趣。

        2)歐氏距離(Euclidean Distance)

        歐氏距離衡量的是空間中兩點(diǎn)之間的絕對距離,在協(xié)同過濾的計(jì)算中,歐氏距離是根據(jù)兩個(gè)用戶共同評過分的項(xiàng)目集,計(jì)算兩個(gè)用戶的相似度。歐氏距離值越小,兩個(gè)用戶相似度越大;歐氏距離值越大,兩個(gè)用戶相似度越小。計(jì)算用戶U和用戶V的相似度公式如下:

        [ Eu,v=i=1n(ui-vi)2]

        其中,[ui]和[vi]表示用戶U和用戶V在共同評分的項(xiàng)目集中對物品的評分。當(dāng)數(shù)據(jù)很稠密并且連續(xù)時(shí),歐氏距離是很好的相似度計(jì)算方式。

        3.2 推薦系統(tǒng)結(jié)構(gòu)圖

        基于用戶的協(xié)同過濾推薦算法,依據(jù)用戶和物品的特征構(gòu)建用戶和物品的同現(xiàn)矩陣;然后根據(jù)用戶的行為數(shù)據(jù),計(jì)算用戶之間的相似度,得到相似用戶集合;最后采用協(xié)同過濾算法,給目標(biāo)用戶推薦相似用戶喜歡而其不知道的物品。主要流程如圖1所示,主要包括以下5個(gè)模塊:

        (1)數(shù)據(jù)預(yù)處理模塊:提取物品特征和用戶行為數(shù)據(jù)。

        (2)構(gòu)建用戶字典模塊:用字典表示每位用戶評論的電影和評分。

        (3)余弦相似度:根據(jù)用戶字典模塊中的評分,計(jì)算用戶間的余弦相似度,生成該用戶的相似度集合。

        (4)歐氏相似度:根據(jù)(3)中計(jì)算的該用戶相似度集合,計(jì)算該用戶的歐氏相似度。

        (5)推薦模塊:根據(jù)計(jì)算的用戶相似度,給相似用戶按評分降序推薦N個(gè)物品。

        4 推薦系統(tǒng)實(shí)現(xiàn)

        4.1 數(shù)據(jù)集簡介

        本文試驗(yàn)采用ml-latest-small數(shù)據(jù)集[5],該數(shù)據(jù)集中有610個(gè)用戶和9742部電影,包含了100836個(gè)收視率和3683個(gè)標(biāo)簽應(yīng)用,產(chǎn)生100837條評分記錄,每一條記錄的評分為0.5-5的數(shù)字。

        該數(shù)據(jù)集中的用戶均為隨機(jī)選擇,每個(gè)用戶不包含個(gè)人信息,所有被選中的用戶至少對20部電影進(jìn)行了評分。數(shù)據(jù)集收集的日期從1996年3月29日至2018年9月24日期間,于2018年9月26日創(chuàng)建。表1展示了評分?jǐn)?shù)據(jù)集中2個(gè)評分記錄的例子,包括用戶ID、物品ID、評分和時(shí)間戳。表2展示了電影數(shù)據(jù)集中2個(gè)電影信息的例子,包括物品ID、電影名和電影類型。

        4.2 數(shù)據(jù)預(yù)處理

        提取數(shù)據(jù)集中的數(shù)據(jù)進(jìn)行預(yù)處理,將電影信息數(shù)據(jù)集中的電影ID、電影名稱和電影評分?jǐn)?shù)據(jù)集中的用戶ID和用戶評分依次讀出,建立物品和評分特征矩陣。其Python實(shí)現(xiàn)關(guān)鍵代碼[6]如下:

        defReadData(movie,rating):

        '''

        提取數(shù)據(jù),并建立物品和評分特征矩陣

        :param movies:表示電影信息數(shù)據(jù)集文件

        :param ratings:表示電影評分?jǐn)?shù)據(jù)集文件

        :return:返回特征矩陣,并按userId的值排序

        '''

        movies=pd.read_csv(movie)

        ratings=pd.read_csv(rating)

        merge_data=pd.merge(ratings,movies,on='movieId')

        merge_data.sort_values('userId')

        returnmerge_data

        4.3 用python構(gòu)建用戶字典

        根據(jù)物品和評分矩陣,將每位用戶評論的電影和評分存放在字典中。評分?jǐn)?shù)據(jù)用于計(jì)算用戶相似度,電影信息用于生成推薦結(jié)果。其Python實(shí)現(xiàn)關(guān)鍵代碼如下:

        defcreat_dict(file):

        '''

        :param file: 表示由特征矩陣生成的文件

        :return: 返回結(jié)果是由字典存放每位用戶評論的電影和評分

        '''

        data_dict={}

        for line infile.readlines():

        line=line.strip().split(',')

        if not line[0] indata_dict.keys():

        data_dict[line[0]]={line[3]:line[1]}

        else:

        data_dict[line[0]][line[3]]=line[1]

        returndata_dict

        4.4 相似度研究

        1)用余弦相似度算法尋找相似用戶

        從用戶字典中取出兩個(gè)用戶共同評分的電影,采用余弦相似度公式,計(jì)算兩個(gè)用戶間的相似度。其Python實(shí)現(xiàn)關(guān)鍵代碼如下:

        defcos_sim(user1,user2):

        #根據(jù)兩用戶共同評分的電影,計(jì)算兩者間的余弦相似度

        user1_data=data_dict[user1]

        user2_data=data_dict[user2]

        common={}

        forkeyin user1_data.keys():

        ifkeyin user2_data .keys():

        common[key]=1

        iflen(common)==0:

        return0

        sum1Sq = sum([pow(float(user1_data[movie]),2) for movie in common])

        sum2Sq = sum([pow(float(user2_data[movie]),2) for movie in common])

        CSum=sum([float(user1_data[movie])*float(user2_data[movie]) for movie in common])

        dist=sqrt(sum1Sq)*sqrt(sum2Sq)

        ifden==0:

        return 0

        returnCSum/dist

        2)用歐氏距離找出相似用戶

        從用戶字典中取出兩用戶共同評分的電影,采用歐氏距離公式,計(jì)算兩用戶間的相似度。其Python實(shí)現(xiàn)關(guān)鍵代碼如下:

        defEuclid_sim(user1,user2):

        #根據(jù)兩用戶共同評論過的電影,計(jì)算兩者間的歐氏距離

        user1_data=data_dict[user1]

        user2_data=data_dict[user2]

        distance=0

        forkeyin user1_data.keys():

        ifkeyin user2_data .keys():

        distance +=pow(float(user1_data[key])-float(user2_data[key]),2)

        return1/(1+sqrt(distance))

        4.5 推薦模塊的實(shí)現(xiàn)

        根據(jù)相似度用戶對電影的評分,對某個(gè)用戶未觀看過的電影進(jìn)行興趣推薦,并根據(jù)電影評分值降序進(jìn)行TOP-N推薦。本系統(tǒng)中為某個(gè)用戶推薦了評分排名前5的電影,其Python實(shí)現(xiàn)關(guān)鍵代碼如下:

        defrecom_user(user):

        #給user用戶推薦評分排名前5的電影

        top_sim_user=top10_simliar(user)[0][0]

        items=data_dict[top_sim_user]

        recommendations=[]

        foritemin items.keys():

        ifitemnot in data_dict[user].keys():

        recommendations .append((item,items[item]))

        recommendations.sort(key=lambda val:val[1],reverse=True)

        returnrecommendations[:5]

        4.6 輸出推薦結(jié)果

        調(diào)用主函數(shù),為用戶3推薦5部未觀看過的電影,得到推薦結(jié)果如圖2所示。

        Recomm_user = recom_user('3')

        for movie, rating in Recomm_user:

        print('給3號用戶推薦的電影:%-25s' % movie, '評分:%.6f' % float(rating))

        4.7 用戶相似度比較

        圖3是用戶3通過兩種算法得到的用戶相似度比較結(jié)果。根據(jù)余弦相似度計(jì)算得到與用戶3相似的前10個(gè)用戶集合,從圖中可以看出此集合用戶與用戶3的余弦相似度值均接近于1,表示該集合用戶相似度非常高;同時(shí),此集合用戶與用戶3的歐氏距離值均在0—0.5之間,表示這10個(gè)用戶的歐氏相似度是正相關(guān)。

        5 結(jié)語

        本文依據(jù)推薦系統(tǒng)的相關(guān)技術(shù),構(gòu)建了推薦系統(tǒng)結(jié)構(gòu)圖,使用協(xié)同過濾算法和 Python語言實(shí)現(xiàn)了基于用戶的協(xié)同過濾推薦系統(tǒng),并通過實(shí)驗(yàn)驗(yàn)證了用戶相似度的算法。該系統(tǒng)具有普適性,可以在多個(gè)領(lǐng)域主動(dòng)為用戶推薦其感興趣的商品,滿足其個(gè)性化需求。在未來的工作中,將優(yōu)化算法,綜合構(gòu)建用戶興趣模型,進(jìn)一步提高推薦系統(tǒng)性能和推薦精度。

        參考文獻(xiàn):

        [1] Isinkaye F O,F(xiàn)olajimi Y O,Ojokoh B A.Recommendationsystems:Principles,methods and evaluation[J].Egyptian Informatics Journal,2015,16(3):261-273.

        [2] 項(xiàng)亮.推薦系統(tǒng)實(shí)踐[M].北京:人民郵電出版社,2012.

        [3] 李鋒,冷娜.協(xié)同過濾的紡織面料推薦系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,2018,38(z2):115-118.

        [4] 楊震,司書勇,李超陽.基于用戶隱式興趣模型的信息推薦技術(shù)研究[J].山東大學(xué)學(xué)報(bào),2017(52):1-7.

        [5] The MovieLens Datasets: History and Context. ACM Transactions on Interactive Intelligent Systems (TiiS) 5, 4: 19:1-19:19. https://doi.org/10.1145/2827872.

        [6] 董付國.Python程序設(shè)計(jì)開發(fā)寶典[M].北京:清華大學(xué)出版社,2017.

        【通聯(lián)編輯:光文玲】

        风韵饥渴少妇在线观看| 亚洲福利一区二区不卡| 99热成人精品国产免国语的| 蜜臀av人妻一区二区三区| 亚洲精品一区二区三区日韩| 亚洲国产丝袜久久久精品一区二区 | 国产一区二区三区四区五区vm| 人妻系列无码专区久久五月天| 精品国产中文久久久免费| 小说区激情另类春色| 熟妇人妻无码中文字幕| 久久久久久久久国内精品影视| 国产91精品丝袜美腿在线| 久久这里都是精品99| 国产一区二区三区乱码| 99热免费精品| 久久亚洲国产中v天仙www| av网址大全在线播放| 一区二区三区视频在线观看| 国产成人一区二区三区| 国产91成人精品亚洲精品| 国内精品极品久久免费看| 手机在线观看日韩不卡av| 天美传媒一区二区| 国产精品揄拍100视频| 天天摸天天做天天爽天天舒服 | 国产精品无码不卡在线播放| 日本老熟妇五十路一区二区三区| 国内精品久久久久久久97牛牛 | 午夜精品久久久| 综合图区亚洲偷自拍熟女| 中文有码亚洲制服av片| 日本熟妇人妻xxxxx视频| 欧洲国产精品无码专区影院| 91麻豆精品一区二区三区| 一本大道道久久综合av| 特级av毛片免费观看| 亚洲国产精品久久九色| 日本老熟妇五十路一区二区三区| 东京热无码av一区二区| 国产精品无码精品久久久|