项目简介
- 基于Spark, Python Flask, 和 Book-Crossing Dataset 的在线图书推荐系统。
- 源代码地址:https://github.com/XuefengHuang/spark-book-recommender-system。
- 适合初学者学习如何搭建一个推荐系统,本文底下附有其他数据,可供参考学习。
基于模型的协同过滤应用—图书推荐
本文实现对用户推荐图书的简单应用。
- 推荐算法:
在我们的在线图书推荐系统中,我们借用Spark的ALS算法的训练和预测函数,每次收到新的数据后,将其更新到训练数据集中,然后更新ALS训练得到的模型。
假设我们有一组用户,他们表现出了对一组图书的喜好。用户对一本图书的喜好程度越高,就会给其更高的评分,范围是从1到5。我们来通过一个矩阵来展示它,行代表用户,列代表图书。用户对图书的评分。所有的评分范围从1到5,5代表喜欢程度最高。第一个用户(行1)对第一个图书(列1)的评分是4。空的单元格代表用户未给图书评价。
矩阵因子分解(如奇异值分解,奇异值分解+ +)将项和用户都转化成了相同的潜在空间,它所代表了用户和项之间的潜相互作用。矩阵分解背后的原理是潜在特征代表了用户如何给项进行评分。给定用户和项的潜在描述,我们可以预测用户将会给还未评价的项多少评分。
- 数据描述:
评分数据文件:
"User-ID";"ISBN";"Book-Rating"
1 | "276725";"034545104X";"0" |
图书数据文件:
"ISBN";"Book-Title";"Book-Author";"Year-Of-Publication";"Publisher";"Image-URL-S";"Image-URL-M";"Image-URL-L"
1 | "0195153448";"Classical Mythology";"Mark P. O. Morford";"2002";"Oxford University Press";"http://images.amazon.com/images/P/0195153448.01.THUMBZZZ.jpg";"http://images.amazon.com/images/P/0195153448.01.MZZZZZZZ.jpg";"http://images.amazon.com/images/P/0195153448.01.LZZZZZZZ.jpg" |
- 数据处理细节:
由于该数据中ISBN为string格式,spark的ALS默认product id为int格式,因此对该ISBN号进行计算hash处理并取前8位防止整数越界。详细代码如下:
1 | dataset_path = os.path.join('datasets', 'BX-CSV-Dump') |
- 选择模型参数:
1 | from pyspark.mllib.recommendation import ALS |
- 模型保存
1 | from pyspark.mllib.recommendation import MatrixFactorizationModel |
运行说明:
1
2
3virtualenv book
pip install -r requirements.txt
python server.pyRESTful API:
1 | GET: /<int:user_id>/ratings/top/<int:count> 获取用户图书推荐top N信息 |
- 接口调用示例:
1 | GET: /276729/ratings/top/3 获取用户ID为276729的图书推荐top3信息 |
1 | GET: /276729/ratings/0446520802 获取用户276729对图书(ISBN:0446520802)的评价信息 |
其他数据集推荐(参考https://gist.github.com/entaroadun/1653794)
以下数据可以提供给初学者学习如何训练推荐算法模型
电影数据:
- MovieLens - Movie Recommendation Data Sets http://www.grouplens.org/node/73
- Yahoo! - Movie, Music, and Images Ratings Data Sets http://webscope.sandbox.yahoo.com/catalog.php?datatype=r
- Cornell University - Movie-review data for use in sentiment-analysis experiments http://www.cs.cornell.edu/people/pabo/movie-review-data/
音乐数据:
- Last.fm - Music Recommendation Data Sets http://www.dtic.upf.edu/~ocelma/MusicRecommendationDataset/index.html
- Yahoo! - Movie, Music, and Images Ratings Data Sets http://webscope.sandbox.yahoo.com/catalog.php?datatype=r
- Audioscrobbler - Music Recommendation Data Sets http://www-etud.iro.umontreal.ca/~bergstrj/audioscrobbler_data.html
- Amazon - Audio CD recommendations http://131.193.40.52/data/
图书数据:
- Institut für Informatik, Universität Freiburg - Book Ratings Data Sets http://www.informatik.uni-freiburg.de/~cziegler/BX/
美食数据:
- Chicago Entree - Food Ratings Data Sets http://archive.ics.uci.edu/ml/datasets/Entree+Chicago+Recommendation+Data
商品数据:
- Amazon - Product Recommendation Data Sets http://131.193.40.52/data/
健康数据:
- Nursing Home - Provider Ratings Data Set http://data.medicare.gov/dataset/Nursing-Home-Compare-Provider-Ratings/mufm-vy8d
- Hospital Ratings - Survey of Patients Hospital Experiences http://data.medicare.gov/dataset/Survey-of-Patients-Hospital-Experiences-HCAHPS-/rj76-22dk
相亲数据:
- www.libimseti.cz - Dating website recommendation (collaborative filtering) http://www.occamslab.com/petricek/data/
学术文章推荐:
- National University of Singapore - Scholarly Paper Recommendation http://www.comp.nus.edu.sg/~sugiyama/SchPaperRecData.html