MovieLens
收藏MovieLens Recommendation System Project
概述
该项目作为哈佛X数据科学顶点课程的一部分开发,专注于使用MovieLens数据集构建电影推荐系统。目标是根据用户过去的评分预测电影评分,并使用**均方根误差(RMSE)**评估模型性能。
项目在两个编程环境中实现:
- Python使用Jupyter Notebooks,构建和可视化多个模型。
- R,使用R脚本和R Markdown确保可重复性和详细文档。
两种实现方式允许使用不同工具解决相同问题,同时产生可比较的结果。
项目结构
仓库组织如下:
├── Capstone.ipynb # Python Jupyter Notebook实现 ├── MovieReviews.R # 推荐系统的R脚本 ├── MovieReviews.Rmd # R实现的R Markdown报告 ├── MovieReviews.pdf # 从R Markdown生成的PDF报告 ├── README.md # 项目概述(本文件) ├── links.csv # MovieLens链接数据集 ├── movies.csv # MovieLens电影数据集 ├── ratings.csv # MovieLens评分数据集 ├── tags.csv # MovieLens标签数据集
数据集
项目使用MovieLens数据集的子集,包括:
ratings.csv:用户对各种电影的评分。movies.csv:电影标题和类型。tags.csv:用户生成的电影标签。links.csv:外部电影数据源(IMDB,TMDb)的标识符。
环境要求
Python环境
运行Python实现需要以下库:
pandasnumpyscikit-learnmatplotlib- Jupyter Notebook
可以使用pip安装所需包:
bash pip install pandas numpy scikit-learn matplotlib jupyter
R环境
对于R实现,需要以下R包:
tidyversecaret
可以使用以下命令安装:
r install.packages("tidyverse") install.packages("caret")
模型开发
项目涉及以下步骤:
- 将数据集拆分为训练(
edx)和验证(final_holdout_test)集。 - 构建和评估多个模型以预测电影评分。
- 可视化结果并比较每个模型的RMSE。
实现的模型
在Python和R中,实现了以下模型:
-
基线模型:使用所有电影的平均评分作为预测。
- Python RMSE:
0.9665 - R RMSE:
1.0425
- Python RMSE:
-
电影效应模型:通过调整单个电影效应来考虑电影特定的偏差。
- Python RMSE:
0.9665 - R RMSE:
0.9617
- Python RMSE:
-
电影 + 用户效应模型:在电影效应的基础上加入用户特定的偏差。
- Python RMSE:
0.9071 - R RMSE:
0.8731
- Python RMSE:
-
正则化电影 + 用户效应模型:通过在电影和用户偏差上添加惩罚项来防止过拟合。
- Python RMSE:
0.8742 - R RMSE:
0.8527
- Python RMSE:
-
混合模型:结合多种模型(电影效应、用户效应、正则化)并利用矩阵分解(SVD)和K近邻(KNN)。
- Python混合模型RMSE:
0.8655
- Python混合模型RMSE:
可视化(Python)
在Jupyter Notebook中生成了多个可视化图表,以分析和说明数据和模型性能:
- 评分分布:显示评分的分布,突出显示整数峰值。
- 前10部评分最多的电影:条形图显示哪些电影获得最多评分。
- 按电影年份的平均评分:散点图显示基于电影发行年份的平均评分。
- RMSE比较:比较不同模型RMSE的条形图。
结果比较
Python和R实现的结果在模型之间相似,正则化电影 + 用户效应模型在两种环境中表现最佳:
| 模型 | Python RMSE | R RMSE |
|---|---|---|
| 基线模型 | 0.9665 | 1.0425 |
| 电影效应模型 | 0.9665 | 0.9617 |
| 电影 + 用户效应模型 | 0.9071 | 0.8731 |
| 正则化电影 + 用户模型 | 0.8742 | 0.8527 |
| 混合模型 | 0.8655 | N/A |
结论
该项目展示了使用Python和R构建电影推荐系统的过程。最佳性能是通过正则化电影 + 用户效应模型实现的,R中的RMSE为0.8527。未来的改进可以包括高级技术,如矩阵分解或神经网络,以进一步优化系统。




