實現基於內容的電影推薦系統—程式碼實現

想你时风起發表於2024-04-07

引言

昨日在讀論文的過程中講到,要實現一種基於內容的推薦演算法,那麼今天他來了。

今天的演算法實現基於Python的pandas資料處理第三方包和機器學習第三方包sklearn,關於sklearn的詳細資訊可以點選這裡檢視,關於pandas的詳細資訊可以點選這裡檢視

程式碼實現

import pandas as pd  # 匯入資料處理包,pandas
from sklearn.feature_extraction.text import TfidfVectorizer  # TfidfVectorizer轉換文字為特徵向量
from sklearn.metrics.pairwise import cosine_similarity  # cosine_similarity計算餘弦相似度

# 1. 資料預處理
data = pd.read_csv("movies.csv")  # 讀取名為"movies.csv"的CSV檔案,並將其儲存在名為data的Pandas DataFrame中。

# 2. 特徵工程
# 這段程式碼選擇了一些特徵("NAME"、"ACTORS"、"DIRECTORS"、"GENRES"),
# 並將它們組合成一個新的特徵列"FEATURES"。使用apply函式和lambda表示式,
# 將每一行的這些特徵值轉換為字串,並使用空格將它們連線起來。
selected_features = ["NAME", "ACTORS", "DIRECTORS", "GENRES"]
data["FEATURES"] = data[selected_features].apply(lambda x: ' '.join(x.astype(str)), axis=1)

# 3. 構建推薦模型
# 這段程式碼建立了一個TfidfVectorizer物件,並使用它對特徵列"FEATURES"進行擬合轉換。
# fit_transform方法將文字資料轉換為TF-IDF特徵矩陣,並將結果儲存在features_matrix變數中。
tfidf = TfidfVectorizer()
features_matrix = tfidf.fit_transform(data["FEATURES"])

# 4. 使用者輸入特徵
# 這行程式碼定義了使用者的特徵值。在這個示例中,使用者特徵值是一個字串,包含了使用者的偏好或興趣。
# user_feature = "流浪地球 吳京/劉德華/李雪健/沙溢 郭帆 科幻/冒險/災難"

# 5. 計算相似度
# 這行程式碼將使用者特徵值轉換為特徵矩陣。使用transform方法,根據之前擬合的TF-IDF向量化器,將使用者特徵值轉換為與訓練資料相同的特徵表示。
user_feature_matrix = tfidf.transform([user_feature])
# 這行程式碼計算使用者特徵與每個電影特徵之間的餘弦相似度。使用cosine_similarity函式,
# 將使用者特徵矩陣和電影特徵矩陣作為輸入,計算它們之間的相似度。flatten方法將結果展平為一維陣列。
similarity_scores = cosine_similarity(user_feature_matrix, features_matrix).flatten()

# 6. 獲取相似電影推薦
# 這行程式碼根據相似度分數對電影進行排序,並返回排序後的索引。
# argsort函式返回按相似度分數升序排列的索引,然後使用切片操作[::-1]將其反轉,得到按相似度分數降序排列的索引。
similar_movies_indices = similarity_scores.argsort()[::-1]  # 按相似度降序排列的索引

# 這行程式碼根據排序後的索引選擇前5個電影作為推薦電影。使用iloc函式,根據索引選擇對應的電影資料,並將結果儲存在recommended_movies變數中。
recommended_movies = data.iloc[similar_movies_indices[:5]]  # 推薦前5個相似電影

# 7. 列印推薦結果
print("推薦電影:")
# 這段程式碼列印推薦電影的名稱和相似度分數。使用iterrows函式遍歷recommended_movies中的每一行,然後列印電影名稱和對應的相似度分數。
for idx, movie in recommended_movies.iterrows():
     print(movie["NAME"], "- 相似度:", similarity_scores[idx])

其他資訊

此外,有的小夥伴可能問我資料集從哪下載,這裡給出下載地址,本程式所使用的資料集為大資料集,裡面包含十萬多條資料,如果訓練時間太慢或者記憶體不夠用,可以選取其中小的資料集。

我所使用到的資料集已經上傳到雲盤,需要的可以下載.連結:https://pan.baidu.com/s/10k5_LSL0H6HtCtODFMZIvg?pwd=2024 提取碼:2024 --來自百度網盤超級會員V1的分享)
也可以去我的github地址下面下載,裡面除了豆瓣影評以外,還有慕課評論等資料,整理不易,如果感覺可以請點個start哦。

結尾

好了,今天的分享就到這了,下次再見嘍。

相關文章