Skip to content

使用基於 KNN, SVD, SVD++ 模型的協同過濾方法,生成用於推薦系統的預測模型。

License

Notifications You must be signed in to change notification settings

Magic8763/knn_svd_recommendation

Repository files navigation

Collaborative Filtering Recommendation using KNN and SVD

shields

以用戶對電影評分的資料集作為訓練資料,使用基於 KNN, SVD, Funk SVD, SVD++ 模型的協同過濾方法 (Collaborative filtering),生成用於推薦系統的預測模型。

Prerequisites

  • Python3, Pandas, NumPy, Scikit-learn, Surprise, SciPy

Description

  • ratings_filter.py: 資料前處理功能,使用自訂條件對資料量龐大的用戶評分資料集進行篩選
  • sklearn_knn.py: 採用 Scikit-learn NearestNeighbors 演算法,基於電影之間的 cosine 相似性,計算出每部電影的 Top K 近鄰 (相似電影)
  • scipy_svd.py: 採用 SciPy svds 演算法,透過對 user-movie 矩陣的奇異值分解預測每位用戶對任一電影的評分
  • surprise_svd.py: 採用 Surprise svd, svdpp 演算法,以最佳模型參數訓練 Funk SVD, SVD++ 模型,用於預測指定用戶對任一電影的評分

Dataset

  • MovieLens 25M
    • ratings.csv: 用戶評分資料集,由 162541 位用戶對 59047 部電影做出的 2500 萬 0095 個評分,每個評分包含 userId, movieId, rating 等特徵
  • Threading Crawler
    • movies_extended.csv: 電影特徵資料集,包含 62423 部電影的多項特徵,如 movieId, title, year, genres, grade 等

Output

  • ratings@0x1000_1M_compactify.csv: 前處理篩選後剩餘的用戶評分,此範例檔名代表「資料抽樣量 100 萬筆,其中的電影必須是得到了至少 1000 個評分者」的篩選結果,並且完成了電影 ID 的緊湊化 (compactify)
  • movies_sorted.csv: movies_extended.csv 的排序版本,預設依照 year, movieId 兩特徵遞增排序
  • knn_recommended.csv: 對於通過篩選後剩餘的每部電影,與其具有最高 cosine 相似度的前 K 部其他電影,預設 K = 50
  • knn_recommended_sorted.csv: 將 knn_recommended.csv 的緊湊化電影索引還原為 movies_sorted.csv 的電影索引
  • knnRec.pkl: knn_recommended_sorted.csv 的字典格式
  • SVD_predict_df@0x1000_1M.csv: 由 SciPy svds 演算法生成的 user-movie 矩陣,其值表示用戶對電影的預測評分
  • SVD_predict_top50@0x1000_1M.csv: 根據 svd_predict_df@0x1000_1M.pkl 計算每位用戶的前 50 部推薦電影
  • FunkSVD_best@0x1000_1M.pkl: 由 Surprise svd 演算法訓練的 Funk SVD 模型
  • SVD++_best@0x1000_1M.pkl: 由 Surprise svdpp 演算法訓練的 SVD++ 模型

Reference

Authors

License

This project is licensed under the MIT License

About

使用基於 KNN, SVD, SVD++ 模型的協同過濾方法,生成用於推薦系統的預測模型。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages