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