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 來構建推薦系統提供了多種可以簡化建立和定製過程的選項。但是,與任何編碼工作一樣,在開發推薦系統時可能會出現潛在問題。瞭解這些常見問題並採取措施解決這些問題對於確保推薦系統的成功至關重要。

最終,務必記住,推薦系統可以成為一個極其強大的工具,因此值得投入必要的時間和精力來確保其正確構建並最佳執行。

更新於:2023年8月7日

瀏覽量:385

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告