Python 推薦系統
推薦系統是Python中的一種工具,它根據使用者的偏好和過去的行為向用戶推薦專案或內容。這項技術利用演算法來預測使用者的未來偏好,從而為他們提供最相關的內容。
該系統的範圍非常廣泛,在電子商務、流媒體服務和社交媒體等各個行業都有廣泛的應用。產品、電影、音樂、書籍等等都可以透過這些系統進行推薦。提供個性化推薦不僅有助於培養客戶參與度和忠誠度,還可以促進銷售。
推薦系統的型別
基於內容的推薦系統
這些系統基於這樣的理念:使用者可以收到與他們之前參與過的專案類似的專案的推薦。這種系統利用演算法來找出與使用者偏好非常相似的專案,目的是建立一個適合使用者的建議列表。在這個設定中,演算法會分析與專案相關的資料,例如其屬性和使用者評分,以確定要推薦什麼。
演算法
步驟 1 − 匯入必要的庫
步驟 2 − 載入資料集
步驟 3 − 預處理資料
步驟 4 − 計算相似性矩陣
步驟 5 − 對於每個使用者 −
選擇他們互動過的專案
對於步驟 5a 中選擇的每個專案 −
檢索它與所有其他專案的相似性分數
使用使用者的評分作為權重計算相似性分數的加權平均值
根據專案的加權相似性分數以降序排列專案
向用戶推薦前 N 個專案
步驟 6 − 返回所有使用者的推薦。
示例
import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # Load data data = pd.read_csv('movies.csv') # Compute TF-IDF vectors for each movie tfidf = TfidfVectorizer(stop_words='english') tfidf_matrix = tfidf.fit_transform(data['description']) # Compute cosine similarity between all movies cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix) # Function to get top 10 similar movies based on input movie def get_recommendations(title): idx = data[data['title'] == title].index[0] sim_scores = list(enumerate(cosine_sim[idx])) sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True) sim_scores = sim_scores[1:11] movie_indices = [i[0] for i in sim_scores] return data.iloc[movie_indices] # Example usage: get top 10 movies similar to 'The Godfather' get_recommendations('The Godfather')
我們將電影資料從本地 CSV 檔案載入到資料框中。我們使用 fit_transform() 函式轉換電影描述來計算矩陣,並計算餘弦相似性矩陣。
然後,我們定義一個函式,該函式以電影標題作為引數,如果電影標題存在於資料框中,則檢索其索引。
然後,我們建立一個元組列表,其中包含作為引數傳遞的電影標題與所有其他電影標題之間的相似性分數。每個元組都包含一個索引及其相似性分數。然後,我們透過索引資料框來顯示電影標題列表。
輸出
title \ 783 The Godfather 1512 The Godfather: Part II 1103 Casino 3509 Things to Do in Denver When 1246 Snatch 3094 Road to Perdition 2494 Scarface 1244 Following 2164 Dancer 2445 The Day of the Jackal
協同過濾推薦系統
相反,這些系統依賴其他使用者的資料來生成推薦。這種型別的系統比較不同使用者的偏好和行為,然後推薦其他具有類似品味的使用者可能喜歡的專案。與基於內容的系統相比,協同過濾通常更準確,因為它在生成推薦時考慮了多個使用者的意見。
演算法
步驟 1 − 匯入必要的庫。
步驟 2 − 載入包含使用者評分的“ratings.csv”檔案。
步驟 3 − 建立“user_item_matrix”將使用者評分資料轉換為矩陣
步驟 4 − 使用餘弦相似度計算使用者評分的相似度。
步驟 5 − 識別相似的使用者
步驟 6 − 計算平均評分。
步驟 7 − 選擇目標使用者 ID。
步驟 8 − 列印電影 ID 和評分。
示例
import pandas as pd from sklearn.metrics.pairwise import cosine_similarity # Load data ratings_data = pd.read_csv('ratings.csv') # Create user-item matrix user_item_matrix = pd.pivot_table(ratings_data, values='rating', index='userId', columns='movieId') # Calculate cosine similarity between users user_similarity = cosine_similarity(user_item_matrix) # Get top n similar users for each user def get_top_similar_users(similarity_matrix, user_index, n=10): similar_users = similarity_matrix[user_index].argsort()[::-1] return similar_users[1:n+1] # Get recommended items for a user based on similar users def get_recommendations(user_id, user_similarity, user_item_matrix, n=10): similar_users = get_top_similar_users(user_similarity, user_id, n) recommendations = user_item_matrix.iloc[similar_users].mean(axis=0).sort_values(ascending=False).head(n) return recommendations # Example usage user_id = 1 recommendations = get_recommendations(user_id, user_similarity, user_item_matrix) print("Top 10 recommended movies for user", user_id) print(recommendations)
輸出
Top 10 recommended movies for user 1 movieId 1196 5.000000 50 5.000000 1210 5.000000 260 5.000000 1198 5.000000 2571 5.000000 527 5.000000 1197 5.000000 2762 5.000000 858 4.961538
結論
建立推薦系統任務可能會給程式設計師帶來很大的複雜性,但它是一個可以帶來巨大好處的寶貴工具。使用 Python 來構建推薦系統提供了多種可以簡化建立和定製過程的選項。但是,與任何編碼工作一樣,在開發推薦系統時可能會出現潛在問題。瞭解這些常見問題並採取措施解決這些問題對於確保推薦系統的成功至關重要。
最終,務必記住,推薦系統可以成為一個極其強大的工具,因此值得投入必要的時間和精力來確保其正確構建並最佳執行。