- 什麼是推薦係統?
- 推薦係統的用例
- 為什麼是推薦係統?
- 有什麼可以推薦的?
- 實際的例子
- 各種類型的推薦係統
- 基於人氣的推薦係統
- 如何用Python構建一個基於人氣的推薦係統
- 協同過濾
- 如何用Python構建一個用戶-用戶協同過濾推薦係統
什麼是推薦係統?
在當今極其忙碌的世界中,推薦係統變得越來越重要。在有限的24小時內,人們總是沒有足夠的時間去完成無數的任務。因此,推薦係統很重要,因為它們可以幫助他們做出正確的選擇,而不必消耗他們的認知資源。
推薦係統的目的基本上是搜索個人感興趣的內容。此外,創建針對每個用戶/個人的有用和有趣內容的個性化列表還涉及許多因素。推薦係統是一種基於人工智能的算法,可以瀏覽所有可能的選項,並創建一個定製的項目列表,這些項目對個人來說是有趣的和相關的。這些結果是基於他們的個人資料,搜索/瀏覽曆史,其他有相似特征/人口結構的人在看什麼,以及你看這些電影的可能性。這是通過使用可用數據進行預測建模和啟發式來實現的。
推薦係統的用例
推薦並不是一個新概念。即使在電子商務不那麼突出的情況下,零售商店的銷售人員也會向顧客推薦商品,目的是向上銷售和交叉銷售,最終實現利潤最大化。推薦係統的目的也是一樣的。
推薦係統的另一個目標是通過提供相關內容和最大化用戶在你的網站或渠道上花費的時間來實現客戶忠誠度。這也有助於提高客戶參與度。
另一方麵,廣告預算可以通過隻向那些有響應傾向的人展示產品和服務來優化。查看推薦係統python培訓和增強您對其他用例的知識。
以下是一段解釋BigBasket和Netflix使用的推薦係統的視頻:
為什麼是推薦係統?
-他們幫助用戶找到他們感興趣的項目
-幫助項目提供者將項目交付給正確的用戶
-為每個用戶識別最相關的產品
-展示個性化的內容給每個用戶
-向合適的用戶推薦頂級優惠和折扣
-網站可以提高用戶參與度
——通過增加消費增加企業收入
如果您是機器學習的新手,請閱讀“什麼是機器學習?”
有什麼可以推薦的?
-廣告訊息
- - - - - -電影
——書
-音樂曲目
-新聞文章
——餐館
-未來的朋友(社交網站)
-網上學習課程
- - -喬布斯
-研究報告
-投資選擇
-電視節目
——引用
——衣服
-網上交友(約會服務)
-超級市場貨品
實際的例子
以下是一些為推薦係統創建算法並使用它們以個性化的方式更好地服務客戶的先驅的例子。這些都是:
GroupLens:
-通過首創協同過濾模式,幫助開發最初的推薦係統
-它還提供了許多數據集來訓練模型,包括MovieLens和BookLens
亞馬遜:
-實施商業推薦係統
-他們還在計算上做了很多改進
Netflix獎:
-開創潛在因子/矩陣分解模型
Google-Youtube:
-混合推薦係統
-基於深度學習的係統
-社交網絡推薦
各種類型的推薦係統
-基於人氣的推薦係統
-基於分類模型
-基於內容的推薦
-最近的鄰居協同過濾
- 基於用戶的
- 基於項目
-混合方法
—關聯規則挖掘
-基於深度學習的推薦係統
基於人氣的推薦係統
讓我們以一個播放電影的網站為例。該網站還處於初級階段,已經列出了所有的電影供用戶搜索和觀看。這個網站缺少的是一個推薦係統。這導致用戶瀏覽一長串的電影列表,沒有關於看什麼電影的建議。這反過來又降低了用戶參與網站和使用其服務的傾向。因此,解決這個問題最簡單的方法就是使用基於人氣的推薦係統。像IMDb和爛番茄這樣的頂級影評網站建立了一個電影數據庫,並根據評論和評分記錄了它們的受歡迎程度。利用這些數據,根據明星評分向用戶推薦最受歡迎的電影,可以增加用戶的內容消費。
基於人氣的推薦係統不需要了解其他因素,如用戶瀏覽曆史、用戶偏好、電影明星陣容、類型和其他因素。因此,要生成一個可擴展的推薦係統,最需要考慮的因素就是星級。與沒有推薦係統時相比,這增加了用戶粘性的機會。
基於人氣的推薦係統的缺點
-推薦不是根據用戶屬性個性化的,所有用戶看到的都是相同的推薦,而不考慮他們的喜好
-另一個問題是,每部電影的評論數量(反映看過電影的人數)會有所不同,因此平均明星評分會有差異。
-係統沒有考慮到地區和語言偏好,可能會推薦使用當地方言的人可能不理解的語言的電影
一個基於人氣的推薦係統,當根據需求、受眾和業務需求進行調整時,它成為一個混合推薦係統。根據業務需求添加了額外的邏輯以包括定製。
如何用Python構建一個基於人氣的推薦係統?
對於這個練習,我們將考慮MovieLens小數據集,並關注兩個文件,即movies.csv和ratings.csv。
csv有三個字段,分別是:
- MovieId——每個電影都有一個唯一的id
- 標題——這是電影的名字
- 類型-電影的類型
csv文件有四個字段,分別是:
- Userid——為一部或多部電影評分的每個用戶的唯一id
- MovieId——每個電影的唯一id
- 評級——給予用戶對電影的評級
- 時間戳-評分是什麼時候給某一部電影的
#導入所有必要的庫import OS import numpy as np import pandas as pd import matplotlib。pyplot as plt plt.style.use('seaborn-bright') %matplotlib內行#更改目錄到數據文件所在的文件夾#如果數據文件和jupyter筆記本在同一個文件夾中,則不需要執行此步驟os.chdir(r"C:\Users\mirza\Downloads\Compressed\ml-latest-small\ml-latest-small") #在pandas數據框架中導入評級文件ratings_data=pd.read_csv("ratings.csv") ratings_data.head()
movie_names = pd.read_csv (movies.csv) movie_names.head ()
movie_data = pd.merge (ratings_data, movie_names = movieId) movie_data.head ()
#創建一個數據幀=pd.DataFrame(movie_data.groupby('title')['rating'].mean()) trend['總評分數']=pd.DataFrame(movie_data.groupby('title')['rating'] .count()) trend.head()
#情節彙總評分與電影數量plt。Figure (figsize =(10,4)) ax=plt.barh(trend['rating'].round(),trend['total number of ratings'],color='b') plt.show()
#條形圖描述了前25部電影的評論數量。Figure (figsize =(10,4)) ax=plt.subplot() ax.bar(trend.head(25))。Index,trend['總評分數'].head(25),color='b') ax.set_xticklabels(trend. Index,rotation=40,fontsize='12',horizontalalignment="right")set_title("每部電影的評論總數")plt.show()
#計算所有電影的平均評分,並檢查流行的高評分電影movie_data.groupby('title')['rating'].mean().sort_values(ascending=False).head()
這裏的主鍵是movieId,這在兩個數據文件中都是常見的。這個鍵可以連接這兩個文件。
現在,讓我們看看基於人氣的推薦係統的Python代碼。
步驟1:包含以下包以允許使用在這些包下定義的函數。單元格將包括:
—導入操作係統
—將numpy導入為np
-進口熊貓作為pd
步驟2:更改工作目錄並將其替換為存儲數據集的位置
步驟3:使用下麵的命令將評級文件讀入本地變量ratings_data。”。Head '顯示數據集中前五個記錄。此外,您可以看到,我們正在這個單元格中使用我們之前調用過的pandas庫。
類似地,按下麵的方式讀取電影文件
步驟4:通過在列movieId上調用pandas庫中的Merge函數,將兩個數據變量ratings_data和movie_names合並在一起。這給出了一個新的數據幀' movie_data '。
打印movie_data頭,您可以查看這個新變量的出現格式。
步驟5:接下來,使用matplotlib庫的“barh”函數繪製一個水平柱狀圖,以獲得數據的概述。我們彙總了所有電影的評分,並繪製了電影數量與評分的柱狀圖。
步驟6:接下來,我們繪製一個柱狀圖,分別描述每部電影的評論總數。
步驟7:最後,我們將標題和它們的評分按順序排列。這為我們提供了一個排名靠前的電影列表
現在,正如前麵提到的,大量用戶可能正在評論和評價某些電影。而隻有一個用戶可能會給其他電影打分。在這種情況下,一些不太受歡迎的電影可以進入推薦列表,而一些更受歡迎的電影則無法進入推薦列表。為了避免這種偏見,我們可以添加一條規則來更好地判斷電影的受歡迎程度。
此外,新電影可能比老電影更受歡迎,盡管平均評分可能表明情況並非如此。在這種情況下,可以在最近上映的電影的評分值上增加額外的權重,以推高它們在推薦列表中的位置。
協同過濾
協同過濾有兩種類型,分別是:
- 用戶-用戶協同過濾
- 項目-項目協同過濾
讓我們通過一個例子來了解這種類型的推薦係統。假設有兩個用戶A和B。
現在,這些用戶都觀看了一些電影,並對它們進行了以下評分:
用戶 | 用戶B | ||
電影 | 評級 | 電影 | 評級 |
1 | - - - - - - | 3. | 5/5 |
2 | - - - - - - | 4 | 1/5 |
3. | 5/5 | 6 | - - - - - - |
4 | 1/5 | 7 | - - - - - - |
5 | - - - - - - | 8 | - - - - - - |
在這裏,我們可以看到A和B都有兩部共同的電影,並且都以相似的方式對這些電影進行了評級。因此,我們可以假設這兩個用戶都散發著相似的特征,他們都想看類似的電影。
在這裏,推薦係統將向用戶B推薦電影1、2和5(如果評分高),因為用戶A看過這些電影。類似地,電影6、7和8(如果評分高)將推薦給用戶A(如果評分高),因為用戶B看過它們。這是一個用戶-用戶協同過濾的例子。
衡量用戶之間的相似性
我們可以用不同的方法來衡量兩個用戶之間的相似性。一個簡單的方法是將皮爾遜的相關性應用於常見項目。如果結果是正相關且高度相關的,那麼用戶A觀看並喜歡的電影就可以推薦給用戶B,反之亦然。另一方麵,如果相關性是負的,那麼就沒有什麼值得推薦的,因為兩個用戶不相似。
用戶-用戶協同過濾的局限性
- 一個用戶可能正在觀看一個特定的小眾類型的電影,而其他人沒有在看。因此,沒有類似的概要文件,因此沒有推薦。
- 如果是一部新電影,就沒有足夠的用戶評分來匹配
- 在新用戶的情況下,該用戶看過或評分的電影並不多。因此,很難將這些用戶映射到相似的用戶。
如何用Python構建一個用戶-用戶協同過濾推薦係統?
數據集from surprise導入from surprise精度from surpriseUserId:: MovieID:: Rating::Timestamp data= datasset .load_builtin('ml-100k')
輸出:
#使用基於用戶的true/false在基於用戶的或基於項目的協同過濾器trainset之間切換,testset=train_test_split(data,test_size=.15) algo=KNNWithMeans(k=50,sim_options={'name':'pearson_baseline','user_based': true})
輸出:
uid=str(196) #raw user id lid=str(302) #raw item id #獲取特定用戶和項目的預測pred= algorithm .predict(uid,lid,verbose=True)
輸出:
test_pred= algorithm .test(testset) test_pred
輸出:
實現用戶-用戶協同過濾的庫函數是帶均值的K近鄰函數。它是庫“surprise”的一部分,“surprise”代表推薦係統的簡單python庫。
' Surprise '還包含一個名為' dataset '的子庫,其中包含一些可用於工作的免費數據集。它消除了從其他來源下載數據集的需要。這裏包含的另一個函數是' train-test-split '。一部分數據將用於了解需要推薦什麼,另一小部分數據將用於測試推薦係統的性能。
步驟1:第一步是安裝和導入驚喜包.使用pip(您需要numpy和C編譯器。Windows用戶可能更喜歡使用conda):
#使用conda安裝-c conda-forge scikit-surprise
步驟2:加載內置數據集' ml-100k '並將其稱為data。將數據分成兩部分,即85%用於培訓,15%用於測試。
步驟3:按以下方法應用KNNWithMeans。然後,將算法與訓練集擬合。
在這裏,該功能將顯示與用戶最近的50個鄰居,這些鄰居對電影的評價與該用戶被考慮的方式非常相似。算法使用' pearson_baseline '來識別這些鄰居。這一步完成了模型的訓練。
此外,該模型還可以預測用戶對他或她還沒有看過的電影可能給出的評分。選擇一個特定的用戶id,比如196,和一個特定的電影id,比如302,用戶196沒有看過。現在,我們可以在上麵定義的“算法”的幫助下預測用戶會給這部電影的評分。
該模型找到最近的50個鄰居,並選擇這些用戶為電影302提供的評分。這些評分的平均值是用戶196可能給電影的預測評分。
此外,較高的預測評分意味著這部電影可以推薦給用戶,用戶很可能會點擊觀看。
步驟4:通過上麵定義的模型('算法')傳遞測試數據集(' testset ')來測試模型。這將預測每個用戶為數據集中的每部電影提供的評分。
如果用戶或電影非常新,我們沒有很多記錄來預測結果。在這種情況下,預測中的最後一個值將顯示為“was_impossible”:真的.
步驟5:最後,通過比較預測值和原始評分值來衡量推薦係統的性能。這裏我們將計算“RMSE”(均方根誤差)值。
在本例中,RMSE值為0.9313,可以根據數據集的大小來判斷它是好是壞。
以下是完整的電影推薦係統大師課。在評論中留下你的問題,我們很樂意為你解答。
這是兩個推薦係統的示例及其在Python中的實現。
如果你想了解更多關於這些概念的知識,你可以報名參加人工智能和機器學習課程今天就要提高技能。向最優秀的人學習人工智能,並獲得職業幫助。提升技能,開啟你夢想的職業生涯。如果你有任何疑問,請在下方留言。