日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

movielens推荐系统_浅谈推荐系统+3个小时上手python实现(完整代码)

發布時間:2024/9/3 python 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 movielens推荐系统_浅谈推荐系统+3个小时上手python实现(完整代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

已經9012年了應該也不需要我解釋什么是推薦系統,大致就像頭圖一樣,挖掘用戶的喜好,精準的推送給用戶ta想要的東西!推薦系統可以說是無處不在了,電商的猜你喜歡,瀏覽器右側的推送消息,包括搜索結果的排序,廣義來說都算推薦系統的一部分。而且據聽說(沒錯,是聽說的,因為沒有找到切實的數據來源),推薦系統給亞馬遜帶來了35%的銷售收入,給Netflix帶來了高達75%的消費,并且Youtube主頁上60%的瀏覽來自推薦服務。推薦系統的重要性可見一斑! 同志們必須要學起來遼!

因為目標是讓在座的各位一天就可以用Python先上手一波推薦系統,所以這篇也只是淺談和概括推薦系統的相關知識啦!

目的是一切action的驅動力!

推薦系統的目的是:

  • 幫助用戶快速找到想要的商品,提高用戶對網站的忠誠度;
  • 提高網站交叉銷售能力、成交轉化率;
  • 表現形式:

  • Browsing : 推薦系統根據查詢返回高質量的推薦;
  • Similar Item : 根據相似物品推薦;
  • Email : 通過郵件推送感興趣的商品 (亞馬遜);
  • Top-N : 推送最可能吸引用戶的商品;
  • Order-Search Results : 搜索結果按照興趣排列;
  • 技術:

  • People-to-People correlation 協同過濾
  • 2. Item-to-Item 根據產品推薦相關產品

    3. Based on 用戶基礎信息

    4. 關聯規則挖掘

    ......... 還有很多算法技術,先不做累述,直接上手協同過濾歐式距離算法。

    協同過濾算法解析:

    協同過濾中的“同”代表要找出有共同經驗的群體;

    為特定用戶找到他真正感興趣的內容的好方法是,首先找到與此用戶有相似興趣的其他用戶,然后將他們感興趣的內容推薦給此用戶。

    現在我們的目標是為User1找到可推薦的電影。

    梳理步驟:

  • 首先,找到User1 喜歡的電影;
  • 找出與User1具有相同的電影興趣愛好的人群;
  • 找出該人群喜歡的其他電影;
  • 將這些電影推送給User1。
  • (一)、首先想象我們要這樣一個表格:

    橫坐標,假設有10w部電影,所以橫坐標有10w個movie_id,數據來源自數據庫

    縱坐標,假設有100w個用戶,所以縱坐標有100w個user_id,數據也來自數據庫

    交叉處,“1”代表用戶喜愛這部電影,數據來自日志(例如瀏覽過,查找過,點贊過,)

    "空白"代表用戶不喜愛這部電影,因為沒有任何瀏覽日志

    (二)、找到用戶A(user_id_1)的興趣愛好

    如圖:用戶user_id_1喜歡電影{m1,m2,m3}


    (三)、找到與用戶A(user_id_1)具有相同電影興趣愛好的用戶群體集合Set<user_id>

    如圖可以看到,喜歡{m1, m2, m3}的用戶,除了u1,還有{u2, u3}

    (四)、 找到該群體喜歡的電影集合Set<movie_id>

    如圖具備相同喜好的用戶{u2, u3},還喜好的電影集合是{..., m10000} (橘色的位置)

    (五)、未來用戶(use_id_1)來訪問網站時,要推薦電影{..., m10000}給ta。

    Python 實現步驟

    第一步:計算兩者之間的相似度

    a.曼哈頓距離計算(計算迅速,節省時間)

    b.歐氏距離計算(計算兩個點之間的直線距離) 本文采用歐式距離

    數據我已備好,是一個有關movie 的數據集,數據包含138,000 個用戶對27,000 個電影的評價,評價分為0-5,數據集詳細介紹點擊MovieLens。

    點擊下面鏈接獲取數據,解壓,讀入Python

    數據 ranking : ml-latest-small(1MB):

    http://files.grouplens.org/datasets/movielens/ml-latest-small.zip?files.grouplens.org

    數據movies: ml-latest(234.2MB):

    http://files.grouplens.org/datasets/movielens/ml-latest.zip?files.grouplens.org

    數據格式如下:

    pip

    ranking 數據集的數據格式movies = pd.read_csv('Desktop/movies.csv') print(movie.head(5))

    movies數據集的數據格式

    合并兩個數據集,通過匹配movie_id

    data = pd.merge(movies,ratings,on = 'movieId') print(data.head(5)) data[['userId','rating','movieId','title']].sort_values('userId').to_csv('Desktop/data.csv',index=False) # 將合并后的數據集輸出保存到桌面 以備后續分析 files = pd.read_csv('Desktop/data.csv') print(file.head(5))

    合并后數據集的數據格式


    采用python字典來表示每位用戶評論的電影和評分

    # 逐行讀取剛剛合并并保存的數據集 content = [] with open('Desktop/data.csv') as fp: content = fp.readlines()# 將用戶、評分、和電影寫入字典data data = {} for line in content[1:100]:line = line.strip().split(',')#如果字典中沒有某位用戶,則使用用戶ID來創建這位用戶if not line[0] in data.keys():data[line[0]] = {line[3]:line[1]}#否則直接添加以該用戶ID為key字典中else:data[line[0]][line[3]] = line[1]data

    字典data的數據格式

    計算任何兩位用戶之間的相似度,由于每位用戶評論的電影不完全一樣,所以首先要找到兩位用戶共同評論過的電影

    然后計算兩者之間的歐式距離,最后算出兩者之間的相似度。

    from math import * def Euclidean(user1,user2):#取出兩位用戶評論過的電影和評分user1_data=data[user1]user2_data=data[user2]distance = 0#找到兩位用戶都評論過的電影,并計算歐式距離for key in user1_data.keys():if key in user2_data.keys():#注意,distance越大表示兩者越相似distance += pow(float(user1_data[key])-float(user2_data[key]),2)return 1/(1+sqrt(distance))#這里返回值越小,相似度越大#計算某個用戶與其他用戶的相似度 def top10_simliar(userID):res = []for userid in data.keys():#排除與自己計算相似度if not userid == userID:simliar = Euclidean(userID,userid)res.append((userid,simliar))res.sort(key=lambda val:val[1])return res[:4]RES = top10_simliar('1') print(RES) # 用戶之間相似度結果:0表示兩位的影評幾乎一樣,1表示沒有共同的影評

    根據相似度來推薦用戶:

    def recommend(user):#相似度最高的用戶top_sim_user = top10_simliar(user)[0][0]#相似度最高的用戶的觀影記錄items = data[top_sim_user]recommendations = []#篩選出該用戶未觀看的電影并添加到列表中for item in items.keys():if item not in data[user].keys():recommendations.append((item,items[item]))recommendations.sort(key=lambda val:val[1],reverse=True)#按照評分排序#返回評分最高的10部電影return recommendations[:10]Recommendations = recommend('1') print(Recommendations)

    推薦結果

    好了,簡版推薦系統結束。

    但是我們需要不斷完善這個推薦系統,例如,我們使用兩個用戶對相同電影的評分來計算相似度其實不夠準確,因為兩個用戶的評價標準不同,有的人對電影評價整體偏高(認為最差的也能給到3.5分),有的人對電影評價偏低(認為最好的電影也只給3.5分),所以在計算的過程中,應該分別減去兩個用戶對電影的整體評分,以修正相似度。下期更~

    總結

    以上是生活随笔為你收集整理的movielens推荐系统_浅谈推荐系统+3个小时上手python实现(完整代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。