简介
通过本文,你可以了解
- Python的一些小tips
- SVD算法的基本思想以及实现
- 如何利用SVD来实现一个比较基础的推荐系统
实现环境
- Pycharm Community Edition
- Python3
- numpy
- pandas
- sklearn
数据来源
- MovieLens数据集
参考文献
《Advances in Collaborative Filtering》
环境的配置
pycharm & python3
配置方式参考上一篇BLOG。
numpy & pandas & sklearn
pandas直接用pip安装即可。
因为在windows环境下直接采用pip安装会出现错误,所以本文推荐在此下载网 1下载numpy+scpiy+sklearn的二进制文件到目录下采用
pip install ***.whl
安装即可。
核心思想
关于SVD的纯数学意义
在矩阵M的奇异值分解中
M=U∑V∗
- V的列(columns)组成一套对 M 的正交”输入”或”分析”的基向量。这些向量是
M∗M 的特征向量。 - U的列(columns)组成一套对 M 的正交”输出”的基向量。这些向量是
MM∗ 的特征向量。 - Σ对角线上的元素是奇异值,可视为是在输入与输出间进行的标量的”膨胀控制”。这些是 MM∗ 及 M∗M 的特征值的非负平方根,并与U和V的行向量相对应。
本算法所采用的思想
在基于SVD算法的推荐系统中,我们可以发现,对于一个打分矩阵M,可以将其分解成P,Q的两个矩阵的乘积,而我们可以分别认为P与Q两个矩阵为用户和电影对每一个因子的影响程度。
了解了以上的思想,我们发现,我们要做的就是根据一个不完整的评分矩阵(通常是如此,因为用户不会对所有的电影打分,因此才需要我们做出推荐)来得出 P 和
在论文《Advances in Collaborative Filtering》中,我们找到了一种通过学习来得到 P 和
rui=μ+bi+