最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

不到40行代碼用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的推薦系統(tǒng)

 更新時(shí)間:2019年05月10日 10:12:53   作者:U2FsdGVkX1x  
這篇文章主要給大家介紹了如何利用不到40行python代碼實(shí)現(xiàn)一個(gè)簡(jiǎn)單的推薦系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

什么是推薦系統(tǒng)

維基百科這樣解釋道:推薦系統(tǒng)屬于資訊過(guò)濾的一種應(yīng)用。推薦系統(tǒng)能夠?qū)⒖赡苁芟埠玫馁Y訊或?qū)嵨铮ɡ纾弘娪啊㈦娨暪?jié)目、音樂(lè)、書(shū)籍、新聞、圖片、網(wǎng)頁(yè))推薦給使用者。

本質(zhì)上是根據(jù)用戶的一些行為數(shù)據(jù)有針對(duì)性的推薦用戶更可能感興趣的內(nèi)容。比如在網(wǎng)易云音樂(lè)聽(tīng)歌,聽(tīng)得越多,它就會(huì)推薦越多符合你喜好的音樂(lè)。

推薦系統(tǒng)是如何工作的呢?有一種思路如下:

用戶 A 聽(tīng)了 收藏了 a,b,c 三首歌。用戶 B 收藏了 a, b 兩首歌,這時(shí)候推薦系統(tǒng)就把 c 推薦給用戶 B。因?yàn)樗惴ㄅ袛嘤脩?A,B 對(duì)音樂(lè)的品味有極大可能一致。

推薦算法分類

最常見(jiàn)的推薦算法分為基于內(nèi)容推薦以及協(xié)同過(guò)濾。協(xié)同過(guò)濾又可以分為基于用戶的協(xié)同過(guò)濾和基于物品的協(xié)同過(guò)濾
基于內(nèi)容推薦是直接判斷所推薦內(nèi)容本身的相關(guān)性,比如文章推薦,算法判斷某篇文章和用戶歷史閱讀文章的相關(guān)性進(jìn)行推薦。

基于用戶的協(xié)同過(guò)濾就是文章開(kāi)頭舉的例子。

基于物品的協(xié)同過(guò)濾:

假設(shè)用戶 A,B,C 都收藏了音樂(lè) a,b。然后用戶 D 收藏了音樂(lè) a,那么這時(shí)候就推薦音樂(lè) b 給他。

動(dòng)手打造自己的推薦系統(tǒng)

這一次我們要做的是一個(gè)簡(jiǎn)單的電影推薦,雖然離工業(yè)應(yīng)用還差十萬(wàn)八千里,但是非常適合新手一窺推薦系統(tǒng)的內(nèi)部原理。數(shù)據(jù)集包含兩個(gè)文件:ratings.csv 和 movies.csv。

# 載入數(shù)據(jù)
import pandas as pd
import numpy as np
df = pd.read_csv('data/ratings.csv')
df.head()

ratings.csv 包含四個(gè)維度的數(shù)據(jù):

  • userId:打分用戶的 ID
  • movieId: 被打分電影的 ID
  • rating: 用戶給電影的打分,處于[1,5]
  • timestamp: 電影被打分的時(shí)間

要推薦電影還需要有電影的名字,電影名字保存在 movies.csv 中:

movies = pd.read_csv('data/movies.csv')
movies.head()

將 ratings.csv 和 movies.csv 的數(shù)據(jù)根據(jù) movieId 合并。

df = pd.merge(df, movie_title, on='movieId')
df.head()

我們這次要做的推薦系統(tǒng)的核心思路是:

  • 根據(jù)所有用戶評(píng)分判斷所有電影與用戶 a 已觀看的某部電影 A 的相似度
  • 給用戶 a 推薦相似度高且評(píng)分高的電影

所以我們要先有所有用戶對(duì)所有電影的評(píng)分的列聯(lián)表:

movie_matrix = df.pivot_table(index = 'userId', columns = 'title' ,values = 'rating')
movie_matrix.head()

假設(shè)用戶 A 觀看的電影是 air_force_one (1997),則計(jì)算列聯(lián)表中所有電影與 air_force_one (1997) 的相關(guān)性。

AFO_user_rating = movie_matrix['Air Force One (1997)']
simliar_to_air_force_one = movie_matrix.corrwith(AFO_user_rating)

這樣我們就得到了所有電影與 air_force_one (1997)的相關(guān)性。

但是,直接對(duì)這個(gè)相關(guān)性進(jìn)行排序并推薦最相關(guān)的電影有一個(gè)及其嚴(yán)重的問(wèn)題:

ratings = pd.DataFrame(df.groupby('title')['rating'].mean())#計(jì)算電影平均得分
ratings['number_of_ratings'] = df.groupby('title')['rating'].count()
import matplotlib.pyplot as plt
%matplotlib inline
ratings['number_of_ratings'].hist(bins = 60);

上圖是電影被評(píng)分次數(shù)的直方圖,可以看到大量的電影評(píng)分次數(shù)不足10次。評(píng)分次數(shù)太少的電影很容易就被判斷為高相關(guān)性。所以我們要將這部分的評(píng)分刪掉。

corr_AFO = pd.DataFrame(similar_to_air_force_one, columns = ['Correlation'])
corr_AFO.dropna(inplace = True)
corr_contact = corr_contact.join(ratings['number_of_ratings'],how = 'left',lsuffix='_left', rsuffix='_right')
corr_AFO[corr_AFO['number_of_ratings']>100].sort_values(by = 'Correlation',ascending = False).head()

這樣我們就得到了一個(gè)與 air_force_one (1997) 高相關(guān)的電影列表。但是高相關(guān)有可能評(píng)分低(概率低),再?gòu)牧斜砝锾魩撞科骄梅指叩碾娪巴扑]就好了。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • pandas中Series的代碼實(shí)例解析

    pandas中Series的代碼實(shí)例解析

    這篇文章主要介紹了pandas中Series的代碼實(shí)例解析,Series序列,是一種一維的結(jié)構(gòu),類似于一維列表和ndarray中的一維數(shù)組,但是功能比他們要更為強(qiáng)大,Series由兩部分組成:索引index和數(shù)值values,需要的朋友可以參考下
    2023-07-07
  • python?pandas如何使用loc和iloc讀取行數(shù)據(jù)或列數(shù)據(jù)

    python?pandas如何使用loc和iloc讀取行數(shù)據(jù)或列數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于python?pandas如何使用loc和iloc讀取行數(shù)據(jù)或列數(shù)據(jù)的相關(guān)資料,在學(xué)習(xí)機(jī)器學(xué)習(xí)的過(guò)程中對(duì)數(shù)據(jù)進(jìn)行預(yù)處理時(shí)避免不了需要使用Pandas進(jìn)行大量操,需要的朋友可以參考下
    2023-10-10
  • Matplotlib實(shí)戰(zhàn)之百分比柱狀圖繪制詳解

    Matplotlib實(shí)戰(zhàn)之百分比柱狀圖繪制詳解

    百分比堆疊式柱狀圖是一種特殊的柱狀圖,可以用于可視化比較不同類別或組的百分比或比例的圖表,下面我們就來(lái)介紹一下如何使用Matplotlib繪制百分比柱狀圖,需要的可以參考下
    2023-08-08
  • 10分鐘用python搭建一個(gè)超好用的CMDB系統(tǒng)

    10分鐘用python搭建一個(gè)超好用的CMDB系統(tǒng)

    這篇文章主要介紹了10分鐘用python搭建一個(gè)超好用的CMDB系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python使用django框架實(shí)現(xiàn)多人在線匿名聊天的小程序

    Python使用django框架實(shí)現(xiàn)多人在線匿名聊天的小程序

    很多網(wǎng)站都提供了在線匿名聊天的小功能,下面小編基于python的django框架實(shí)現(xiàn)一個(gè)多人在線匿名聊天的小程序,具體實(shí)現(xiàn)代碼大家參考下本文
    2017-11-11
  • 在Python中使用代理IP的方法詳解

    在Python中使用代理IP的方法詳解

    在網(wǎng)絡(luò)爬蟲(chóng)開(kāi)發(fā)中,使用代理IP是非常常見(jiàn)的技巧,Python作為一門(mén)強(qiáng)大的編程語(yǔ)言,也提供了很多方法來(lái)使用代理IP,下面,我將就如何在Python中使用代理IP進(jìn)行詳細(xì)的闡述,并舉例說(shuō)明,需要的朋友可以參考下
    2023-07-07
  • 利用Python-iGraph如何繪制貼吧/微博的好友關(guān)系圖詳解

    利用Python-iGraph如何繪制貼吧/微博的好友關(guān)系圖詳解

    這篇文章主要給大家介紹了關(guān)于利用Python-iGraph如何繪制貼吧/微博好友關(guān)系圖的相關(guān)資料,文中顯示介紹了在windows系統(tǒng)下安裝python-igraph的步驟,然后通過(guò)示例代碼演示了繪制好友關(guān)系圖的方法,需要的朋友可以參考下。
    2017-11-11
  • python腳本實(shí)現(xiàn)統(tǒng)計(jì)日志文件中的ip訪問(wèn)次數(shù)代碼分享

    python腳本實(shí)現(xiàn)統(tǒng)計(jì)日志文件中的ip訪問(wèn)次數(shù)代碼分享

    這篇文章主要介紹了python腳本實(shí)現(xiàn)統(tǒng)計(jì)日志文件中的ip訪問(wèn)次數(shù)代碼分享,注意此腳本只適用ip在每行開(kāi)頭的日志文件,需要的朋友可以參考下
    2014-08-08
  • Python3 用matplotlib繪制sigmoid函數(shù)的案例

    Python3 用matplotlib繪制sigmoid函數(shù)的案例

    這篇文章主要介紹了Python3 用matplotlib繪制sigmoid函數(shù)的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • python代碼有一行標(biāo)黃問(wèn)題的解決方案

    python代碼有一行標(biāo)黃問(wèn)題的解決方案

    這篇文章主要介紹了python代碼有一行標(biāo)黃問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評(píng)論

抚顺县| 长宁区| 绿春县| 元朗区| 静宁县| 寿宁县| 常德市| 凌海市| 鱼台县| 汾阳市| SHOW| 浙江省| 鄄城县| 沭阳县| 虹口区| 怀仁县| 万安县| 天气| 诸暨市| 伊宁县| 娱乐| 图木舒克市| 沅江市| 虞城县| 葫芦岛市| 蓬安县| 岳西县| 班玛县| 江安县| 庆安县| 筠连县| 九龙城区| 邵阳市| 房山区| 乌鲁木齐市| 红河县| 肥乡县| 洪湖市| 赫章县| 图木舒克市| 舞阳县|