基于Python和Surprise庫,新手也能動(dòng)手搭建推薦系統(tǒng)
1、簡(jiǎn)介
在數(shù)據(jù)時(shí)代,推薦系統(tǒng)是提升用戶體驗(yàn)的重要工具。今天介紹如何使用亞馬遜的電影評(píng)分?jǐn)?shù)據(jù)集創(chuàng)建電影推薦系統(tǒng)。
2、數(shù)據(jù)加載與探索
首先,通過加載和探索數(shù)據(jù)集開啟數(shù)據(jù)分析過程。首先導(dǎo)入Pandas和Numpy,這是進(jìn)行數(shù)據(jù)處理的基礎(chǔ)庫。通過檢查數(shù)據(jù)集的前幾行、形狀、大小和統(tǒng)計(jì)摘要進(jìn)行探索。.head()方法可以讓我們一窺數(shù)據(jù)集的全貌,而.shape方法則展示了數(shù)據(jù)集的大小。
import pandas as pd
import numpy as np
amazon = pd. read_csv (" path_to / Amazon . csv")
print ( amazon . head ()
print (" Dataset ? shape :", amazon . shape )
3、數(shù)據(jù)清洗和預(yù)處理
為了確保分析的完整性,必須替換缺失值并完善DataFrame。fillna方法可用于處理缺失值,這對(duì)于保持?jǐn)?shù)據(jù)完整性至關(guān)重要。刪除不相關(guān)的列(如'user_id')可以使分析集中在電影評(píng)分上。
Amazon_filtered = amazon . fillna ( value =0)
Amazon_filtered1 = Amazon_filtered . drop ( columns =’user_id ’)
4、深入分析瀏覽量和評(píng)分
通過分析瀏覽量,分析電影的受歡迎程度,這涉及對(duì)評(píng)分進(jìn)行求和并找到最大值。按電影對(duì)評(píng)分進(jìn)行求和可以得到一個(gè)受歡迎度指標(biāo)。argmax()函數(shù)可以識(shí)別出觀看次數(shù)最多的電影。
Amazon_max_views = Amazon_filtered1 .sum ()
max_views_index = Amazon_max_views . argmax ()
print (" Most_viewed _movie _index :", max_views_index )
5、計(jì)算平均評(píng)分
通過計(jì)算電影的平均評(píng)分,可以了解觀眾的總體滿意度。
average_ratings = Amazon_max_views . mean ()
print (" Average_rating :", average_ratings )
6、建立推薦模型:SVD算法
- 格式化數(shù)據(jù)供Surprise使用:通過準(zhǔn)備數(shù)據(jù)以供Surprise庫使用來為推薦做好準(zhǔn)備。
from surprise import Reader , Dataset
reader = Reader ( rating_scale =(-1, 10))
data = Dataset . load_from_df ( melt_df . fillna (0) , reader )
- 模型訓(xùn)練與評(píng)估:該系統(tǒng)的開發(fā)目的是根據(jù)用戶的偏好來推薦電影,推薦系統(tǒng)的首選工具Surprise庫。
from surprise import SVD
from surprise.model_selection import train_test_split ,
cross_validate
trainset , testset = train_test_split (data , test_size =0.25)
algo = SVD ()
algo . fit( trainset )
predictions = algo . test ( testset )
cross_validate (algo , data , measures =[ ’RMSE ’, ’MAE ’], cv =3,
verbose = True )
- 進(jìn)行預(yù)測(cè):現(xiàn)在,使用SVD算法進(jìn)行預(yù)測(cè),該算法是進(jìn)行矩陣因式分解的強(qiáng)大工具,用于預(yù)測(cè)用戶對(duì)電影的評(píng)分。
user_id = ’ A1CV1WROP5KTTW ’
movie = ’Movie6 ’
rating = 5
algo . predict ( user_id , movie , r_ui = rating )
結(jié)果如下所示:
圖片
7、結(jié)論(模型應(yīng)用)
這個(gè)腳本不僅揭示了亞馬遜電影評(píng)分?jǐn)?shù)據(jù)的復(fù)雜性,還提供了一個(gè)多功能的分析工具包。這里的方法也可以適用于各種數(shù)據(jù)場(chǎng)景。例如,在教育領(lǐng)域,類似的推薦系統(tǒng)可以推薦個(gè)性化的學(xué)習(xí)材料、課程甚至課外活動(dòng),從而提高學(xué)生的參與度和學(xué)習(xí)效果。
8、教育示例
利用Surprise庫,根據(jù)學(xué)生的偏好推薦教育資源。
- 數(shù)據(jù)集:
import pandas as pd
# 假設(shè)'education_data.csv'包含列'student_id'、'resource_id'和'rating'
education_data = pd. read_csv (" path_to / education_data . csv")
print ( education_data . head ()
- 分析資源受歡迎程度:
找出最受歡迎或評(píng)分最高的教育資源。
resource_popularity = education_filtered . groupby
’resource_id ’). sum ()
most_popular_resource =
resource_popularity [’rating ’]. idxmax ()
print (" Most_popular_resource :
{ most_popular_resource }")
- 建立教育推薦模型:
利用Surprise庫,根據(jù)用戶偏好推薦教育資源。
resource_popularity =
education_filtered . groupby (’ resource_id ’). sum ()
most_popular_resource =
resource_popularity [’rating ’]. idxmax ()
print (" Most _popular _resource :{ most_popular_resource }")
- 推薦教育資源:
針對(duì)特定學(xué)生和教育資源預(yù)測(cè)評(píng)分,展示該模型在教育環(huán)境中的適用性。
Student_id = ’student123 ’
resource = ’course456 ’
predicted_rating = algo . predict ( Student_id , resource ). est
print (" Predicted_rating_for_resource
{ resource }_by_user_{ user_id }:{ predicted_rating }")
可以在Github上查看源代碼和數(shù)據(jù)集。
【Github】:https://github.com/chukolate007/amazon-user-based-recommendation-system