久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    用python寫一個簡單的推薦系統

     昵稱35093561 2016-07-14

    限時干貨下載:

    回復【7】免費獲取【完整數據分析資料?。ò⊿PSS、SAS、SQL、EXCEL、Project)!

    來源:https://segmentfault.com/a/1190000005152849

    作者:肥肥的兔子



    1

    前言


    我和室友們產生了劇荒,萌生出要做一個個人用的推薦系統,解決劇荒的問題的想法,經過一輪的死纏爛打,這個個人推薦系統終于成型了。


    今天來分享一下心得,對此感興趣的朋友可以自己對著寫一個。


    2

    傳統推薦算法系統


    首先介紹一下傳統的推薦系統方法,之所以叫它傳統,是因為大部分學習資料上都是用這一個方法。

    我們來假設有這么一個矩陣(用python的列表表示):


    矩陣的行代表用戶,列表示物品,其交點表示用戶對該物品的評分。

    假設現在用戶1需要選商品,推薦系統則假設其會選擇并未選擇過的商品,因此,系統會在第一行中尋找評分為0的物品,顯然會找到BC。這時,該怎么知道是推薦B還是C呢?(假設用戶只需推薦一個),這時則需要計算B、C和用戶以前選擇過的物品(已評分)的相似度。

    僅僅算出相似度還不夠,因為你不能判斷這到底是好的那一部分相似還是壞的部分相似。所以這時,我們需要引入用戶的評分作為相似度計算的權重,評分X相似度得到最后的得分(該得分會一直累加,則B的推薦得分會是B與A,D,E的相似得分的累加和)。這樣一來,評分低物品的最后得分自然就低,評分高的物品自然得分就高,這時問題就簡化成排序問題了。


    顯然,上述問題的核心在于如何計算相似度。


    這里給出計算相似度的兩種方法:

    • 歐式距離法
      BA的相似度為例:

      similar = 1/sqrt((0-2)^2 (5-5)^2 (4-2)^2 ……) 最后B與A的相似得分還得乘上評分,score = similar * 2

    • 余弦相似度

    AB為兩列向量,||A||表示A的2范數
    特別注意一點的是,cos的取值是-1~1,我們需要將其歸一化,即把范圍弄成在0~1上。于是相似度計算公司變成
    0.5 0.5*cos



    3

    少用戶推薦系統的創新


    在上述的內容中,我們可以發現傳統的方法有一個特出的問題,傳統的算法需要大量的用戶評分,即矩陣的行數需要較多才能得出的結果才值得參考。這一個需求咋看起來是沒什么問題,也符合我們的邏輯,唯有數據量足夠,我們才能找到較為準確的規律嘛。

    但回到我的需求上來說,這可是一個明顯的缺點,在前言我說明的需求上說過這是一個給宿舍甚至是個人使用的推薦系統。


    也就是說:

    • 我們無法提供大量數據。

    • 我們很懶,我們最可能是告訴系統我從它的推薦中采納了哪一部的電影,而不會去評分,我們可能告訴它質量是否可以接受,但不會像豆瓣用戶那樣給出0~10的準確分數。


    因此,傳統的推薦算法有很多不適合我需求的地方,但是看問題要看本質。無非就是根據用戶的特性,或者根據商品特性,進行與訓練好的模型進行相似性比較。抓住這些特點,我做了少少的'創新'


    • 不基于用戶的評分作相似度,而是用商品的label做標準
      現在很多商品尤其是音樂或者電影,都會具有自己的
      label,比如說喜劇,懸疑,其次還有主演導演等可以作為其特征。電商平臺上也有諸如商品種類衣服,女鞋包包,等,而某些物品,例如衣服,那么衣服的品牌,size,都可以作為用戶的一個選擇的特征。

    • 用戶模型是動態更新的
      這一點不難理解,如果一個用戶長期使用使用該系統,那么他的選擇中很可能已經覆蓋了大量的label,這時基于label的推薦系統則很難區分該用戶的喜好。這時我們有兩個解決方法。第一個是允許用戶自定義label,比如SF就可以自定義問題或文章的標簽,這樣增大了label的多樣性。當然,這個解決方案只能算一個緩解的方案,要想徹底解決,我覺得需要給特征選定有效期。
      增加有效期后,用戶的選擇可以反應出一個時間段內的需求。假設這樣一個場景,一名用戶準備去旅游了,他可能會大量瀏覽旅游用品的出售頁面,例如一次性牙膏等,這時,就可以向該用戶推薦出售旅行用品的網站了。而超過了特征的有效期,例如一周,這時用戶已經旅游回來,因為特征已經無效,推薦系統不再推薦旅游用品(這樣用戶不會覺得莫名其妙。個人經歷,現在某些網站就往往會出現明顯已經超過我感興趣時限的推薦),而是開始重新收集用戶新一周瀏覽的特征,動態構建用戶模型,推薦用戶下一階段他可能需要的物品


      實現上述想法,在python中,我們可以這么做,實現如下字典


      在實現推薦時,則較為容易實現,給定testList。這時需要:

      • 創建名res的空字典

      • 遍歷testList,每一個對象命名為t

      • 遍歷t具有的label,根據labelrecord上獲取信息。

      • 同時獲取當前時間time2,如果time2-time超出了規定時限,則該標簽的信息無效,忽略該label,同時刪除record里面的對應的字段。

      • 若該標簽有效,則t的得分加1,并將t的下標index作為key假如到一個res

      • 遍歷完成后,對res字典按value排序

      • 最后,可以根據需要對排序結果進行訪問。比如只獲取最高的前5名。


      這樣,一個適合少用戶的推薦系統就弄出來啦~

      現在正在宿舍投入運行,至于效果如何可能要一段時間才知道了



      4

      后話


      github 地址:https://github.com/MashiMaroLjc/ML-and-DM-in-action/tree/master/DouBanMovie


      說明一下,github上只是提供了一個實現了上述改進后思路的類recommend.py,并不是一個成型的推薦系統,你可以下載后,根據這個類進行二次開發,比如:

      • 利用flask框架包裝成一個web應用

      • 結合該類并利用SMTP協議,弄一個自動往郵箱發信息的腳本,推薦的電影信息

      • 將類實例化,弄出簡單的命令行應用

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發表

        請遵守用戶 評論公約

        類似文章 更多

        主站蜘蛛池模板: 国产乱妇乱子在线视频| 国产男女性潮高清免费网站| 色噜噜国产精品视频一区二区 | 亚洲国产精品久久久久婷婷老年| 性男女做视频观看网站| 国产精品久久福利新婚之夜| 日本XXXX色视频在线观看免费| 依依成人精品视频在线观看| 三级三级三级A级全黄| 无码人妻一区二区免费AV| 国产影片AV级毛片特别刺激| 国产色视频一区二区三区| 二区中文字幕在线观看| 久久久一本精品99久久精品88| 亚洲精品男男一区二区| 久久精品国产亚洲夜色AV网站| 亚洲精品二区在线播放| 亚洲AV无码久久久久网站蜜桃| 中文字幕人妻精品在线| 精品久久久久久无码中文野结衣 | 四虎成人在线观看免费| 日产精品99久久久久久| 国产中文字幕在线一区| 国产成人久久精品一区二区三区 | 在线高清免费不卡全码| 日本一卡2卡3卡4卡5卡精品视频| 亚洲香蕉网久久综合影视| 国产精品国产自线拍免费软件| 天天影视网色香欲综合网| 日本福利一区二区精品| 亚洲AV无码AV在线影院| 宅男噜噜噜66在线观看| 又大又硬又爽18禁免费看| 强开少妇嫩苞又嫩又紧九色| 亚洲精品在线二区三区| 亚洲人成无码网站18禁| 国产日产欧产精品精乱了派 | 精品玖玖玖视频在线观看| 国产一区二区三区日韩精品| 精品日韩人妻中文字幕| 国产精品VA在线观看无码不卡 |