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

歡迎訪問 生活随笔!

生活随笔

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

python

怎样用python搭建简单的系统_如何用Python搭建一个简单的推荐系统?

發布時間:2025/3/15 python 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎样用python搭建简单的系统_如何用Python搭建一个简单的推荐系统? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

推薦系統的相關知識我們已在前文中提到,在這篇文章中,我們會介紹如何用Python來搭建一個簡單的推薦系統。

本文使用的數據集是MovieLens數據集,該數據集由明尼蘇達大學的Grouplens研究小組整理。它包含1,10和2億個評級。 Movielens還有一個網站,我們可以注冊,撰寫評論并獲得電影推薦。接下來我們就開始實戰演練。

在這篇文章中,我們會使用Movielens構建一個基于item的簡易的推薦系統。在開始前,第一件事就是導入pandas和numPy。

import pandas as pd import numpy as np import warnings warnings.filterwarnings('ignore')

接下來,我們使用pandas read_csv()加載數據集。數據集由制表符分隔,所以我們將 t傳遞給sep參數。然后,使用names參數傳入列名。

df = pd.read_csv('u.data', sep='\t', names=['user_id','item_id','rating','titmestamp'])

接下來查看表頭,檢查一下正在處理的數據。

df.head()

如果我們能夠看到電影的標題而不僅僅是ID,那再好不過了。之后加載電影標題并把它與此數據集合并。

movie_titles = pd.read_csv('Movie_Titles') movie_titles.head()

由于item_id列相同,我們可以在此列上合并這些數據集。

df = pd.merge(df, movie_titles, on='item_id') df.head()

數據集中的每一列分部代表:

?user_id - 評級電影的用戶的ID。

?item_id- 電影的ID。

?rating - 用戶為電影提供的評級,介于1和5之間。

?timestamp - 電影評級的時間。

?title - 電影標題。

使用describe或info命令,就可以獲得數據集的簡要描述。如果想要真正了解正在使用的數據集的話,這一點非常重要。

df.describe()

可以看出,數據集共有100003條記錄,電影的平均評分介于3.52-5之間。

現在我們再創建一個dataframe,其中包含每部電影的平均評分和評分數量。之后,這些評分將用來計算電影之間的相關性。相關性是一種統計指標,表示兩個或多個變量一起波動的程度。相關系數越高,電影越為相似。

以下例子將使用Pearson相關系數 (Pearson correlation coefficient),該數字介于-1和1之間,1表示正線性相關,-1表示負相關, 0表示沒有線性相關。也就是說,具有零相關性的電影完全不相似。

我們會使用pandas groupby 功能來創建dataframe。按照標題對數據集進行分組,并計算其平均值獲得每部電影的平均評分。

ratings = pd.DataFrame(df.groupby('title')['rating'].mean()) ratings.head()

接下來我們創建number_of_ratings列,這樣就能看到每部電影的評分數量。完成這步操作后,就可以看到電影的平均評分與電影獲得的評分數量之間的關系。五星級電影很有可能只被一個人評價,而這種五星電影在統計上是不正確的。

因此,在構建推薦系統時,我們需要設置閾值。我們可以使用pandas groupby功能來創建新列,然后按標題欄分組,使用計數函數計算每部電影的評分。之后,便可以使用head()函數查看新的dataframe。

rating ['number_of_ratings'] = df.groupby('title')['rating'].count() ratings.head()

接下來我們使用pandas繪制功能來繪制直方圖,顯示評級的分布:

import matplotlib.pyplot as plt %matplotlib inline ratings['rating'].hist(bins=50)

可以看到,大多數電影的評分都在2.5-4之間。通過類似的方法還可以將number_of_ratings列可視化。

ratings['number_of_ratings'].hist(bins=60)

從上面的直方圖中可以清楚地看出,多數電影的評分都很低,評分最高的電影是一些非常有名的電影。

現在讓我們再來看一下電影評級與評分數量之間的關系。我們可以使用seaborn繪制散點圖,然后使用jointplot()函數執行此操作。

import seaborn as sns sns.jointplot(x='rating', y='number_of_ratings', data=ratings)

從圖中我們可以看出,電影平均評分與評分數量之間呈正相關關系,電影獲得的評分數量越多,其平均評分越高。

創建基于item的簡易推薦系統

接下來我們會快速創建一個基于item的簡單的推薦系統。

首先,我們需要將數據集轉換為矩陣,電影標題為列,user_id為索引,評級為值。完成這一步,我們將得到一個dataframe,其中列是電影標題,行是用戶ID。每列代表所有用戶對電影的所有評級。評級為NAN表示用戶未對這部電影評分。

我們可以用該矩陣來計算單個電影的評級與矩陣中其余電影的相關性,該矩陣可以通過pandas pivot_table實現。

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

接下來讓我們找到評分數量最多的電影,并選擇其中的兩部電影。然后使用pandas sort_values并將升序設置為false,以便顯示評分最多的電影。然后使用head()函數來查看評分數目最多的前十部電影。

ratings.sort_values('number_of_ratings', ascending=False).head(10)

假設一個用戶曾看過Air Force One(1997)和Contact(1997),我們想根據這兩條觀看記錄向該用戶推薦其他類似的電影,那么這一點可以通過計算這兩部電影的評級與數據集中其他電影的評級之間的相關性來實現。第一步是創建一個dataframe,其中包含來自movie_matrix的這些電影的評級。

AFO_user_rating = movie_matrix['Air Force One (1997)'] contact_user_rating = movie_matrix['Contact (1997)']

Dataframe可以顯示user_id和這兩部電影的評分。

AFO_user_rating.head() contact_user_rating.head()

使用pandas corwith功能計算兩個dataframe之間的相關性。有了這一步,就能夠獲得每部電影的評級與Air Force One電影的評級之間的相關性。

similar_to_air_force_one = movie_matrix.corrwith(AFO_user_rating)

可以看到,Air Force One電影和Till There Was You(1997)之間的相關性是0.867。這表明這兩部電影之間有很強的相似性。

similar_to_air_force_one.head()

還可以計算Contact(1997)的評級與其他電影評級之間的相關性,步驟同上:

similar_to_contact = movie_matrix.corrwith(contact_user_rating)

可以從中發現,Contact(1997)和Till There Was You(1997)之間存在非常強的相關性(0.904)。

similar_to_contact.head()

前邊已經提到,并非所有用戶都對所有電影進行了評分,因此,該矩陣中有很多缺失值。為了讓結果看起來更有吸引力,刪除這些空值并將相關結果轉換為dataframe。

corr_contact = pd.DataFrame(similar_to_contact, columns=['Correlation']) corr_contact.dropna(inplace=True) corr_contact.head()corr_AFO = pd.DataFrame(similar_to_air_force_one, columns=['correlation']) corr_AFO.dropna(inplace=True) corr_AFO.head()

上面這兩個dataframe分別展示了與Contact(1997)和Air Force One(1997)電影最相似的電影。然而,問題出現了,有些電影的實際質量非常低,但可能因為一兩位用戶給他們5星評級而被推薦。

這個問題可以通過設置評級數量的閾值來解決。從早期的直方圖中看到,評級數量從100開始急劇下降。因此可以將此設置為閾值,但是也可以考慮其他合適的值。為此,我們需要將兩個dataframe與rating datframe中的number_of_ratings列一起加入。

corr_AFO = corr_AFO.join(ratings['number_of_ratings']) corr_contact = corr_contact.join(ratings['number_of_ratings'])corr_AFO.head()corr_contact.head()

現在,我們就能得到與Air Force One(1997)最相似的電影,并把這些電影限制在至少有100條評論的電影中,然后可以按相關列對它們進行排序并查看前10個。

corr_AFO [corr_AFO ['number_of_ratings']> 100] .sort_values(by ='correlation',ascending = False).head(10)

我們注意到Air Force One(1997)與自身相關性最高,這并不奇怪。下一部與Air Force One(1997)最相似的電影是Hunt for Red October,相關系數為0.554。

顯然,通過更改評論數量的閾值,我們可以按之前的方式得到不同的結果。限制評級數量可以讓我們獲得更好的結果。

現在重復上邊的步驟,可以看到與Contact(1997)電影最相關的電影:

corr_contact [corr_contact ['number_of_ratings']> 100] .sort_values(by ='Correlation',ascending = False).head(10)

與Contact(1997)最相似的電影是Philadelphia(1993),相關系數為0.446,有137個評級。所以,如果有人喜歡Contact(1997),我們可以向他們推薦上述電影。

以上是構建推薦系統的一種非常簡單的方法,但并不符合行業標準。后續的話我們可以通過構建基于存儲器的協同過濾系統來改進該系統。在這種情況下,將數據劃分為訓練集和測試集,使用諸如余弦相似性來計算電影之間的相似性;或者構建基于模型的協作過濾系統,然后使用Root Mean Squared Error(RMSE)等技術評估模型。

(以上內容由第四范式先薦整理發布)

總結

以上是生活随笔為你收集整理的怎样用python搭建简单的系统_如何用Python搭建一个简单的推荐系统?的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 风间由美av在线 | 狂野欧美性猛交xxⅹ李丽珍 | 男操女视频免费 | 日本韩国欧美一区二区 | 免费视频日韩 | 99热热热| 日韩av手机在线播放 | 日本狠狠操 | 国产精品99久久久久久人 | 青青青免费在线 | 很污的网站 | 91久久婷婷 | 奶波霸巨乳一二三区乳 | 亚洲国产精品久久久久爰色欲 | 99视频| 日本少妇做爰全过程毛片 | 欧美亚洲另类小说 | 精品无码一区二区三区蜜臀 | 一区二区日韩 | 精品人妻一区二区三区四区 | 老版水浒传83版免费播放 | 少妇久久精品 | 超碰人人爱| 亚洲性xxxx | 中文字幕永久在线播放 | 久久久精品视频免费 | 老狼影院伦理片 | 美日韩av| 日韩高清在线一区 | 波多野结衣潜藏淫欲 | jizz在线免费观看 | 天天综合干 | 精品国产乱码久久久久久影片 | 打开每日更新在线观看 | 国产精品白虎 | 久久久久国产一区二区三区 | 成人网站免费观看 | 久久五月天综合 | 91精品久久久久 | 久久123| 免费一级肉体全黄毛片 | 97精品| 婷婷久久久久久 | 色婷婷国产精品综合在线观看 | 三级国产在线 | 欧美a大片 | 永久免费不卡在线观看黄网站 | 欧美日韩一区二区三区视频 | 9l视频自拍九色9l视频 | 有码一区二区三区 | 成人在线观看网站 | cekc老妇女cea0 | 国产在线专区 | 国产一区二区免费在线 | 极品销魂美女一区二区 | 日韩大片免费 | 午夜视频在线看 | 91视频看 | 亚洲人天堂 | 日本欧美一区二区三区不卡视频 | 色就色欧美 | 伊人青青 | 国产99re| 好吊操免费视频 | 日韩一级不卡 | 三级免费网址 | 黄页网址大全免费观看 | 精品国产乱码久久久久久鸭王1 | 在线观看国产黄色 | 年下总裁被打光屁股sp | 在线观看911视频 | 午夜精品久久久久久久久久久 | 亚洲激情三区 | 免费黄色网页 | 黑人巨茎大战欧美白妇 | 欧美一区免费看 | 女同视频网站 | 中国美女黄色 | 污视频免费看 | 中文字幕精品无码一区二区 | av永久| av色吧| 黄色小说图片视频 | 高清日韩 | 日本公与丰满熄 | 免费视频污| 艳妇臀荡乳欲伦交换在线看 | 名校风暴在线观看免费高清完整 | 精品在线视频一区二区 | 日本一本久| 男人爆操女人 | 久久久人体 | 日本一区二区在线不卡 | 91在现看 | 国产视频一二 | 小泽玛利亚在线 | 国产精品国产自产拍高清av | 日本少妇做爰全过程毛片 | 1769国产|