没有合适的资源?快使用搜索试试~ 我知道了~
python机器学习:推荐系统实现(以矩阵分解来协同过滤)
22 下载量 69 浏览量
2021-01-06
18:00:03
上传
评论 9
收藏 238KB PDF 举报
温馨提示
试读
2页
原文链接:http://tecdat.cn/?p=10911 用户和产品的潜在特征编写推荐系统矩阵分解工作原理使用潜在表征来找到类似的产品。 1. 用户和产品的潜在特征 我们可以通过为每个用户和每部电影分配属性,然后将它们相乘并合并结果来估计用户喜欢电影的程度。 然后我们使用pandas数据透视表函数来构建评论矩阵。在这一点上,ratings_df包含一个稀疏的评论阵列。 接下来,我们希望将数组分解以找到用户属性矩阵和我们可以重新乘回的电影属性矩阵来重新创建收视率数据。为此,我们将使用低秩矩阵分解算法。我已经在matrix_factorization_utilities.py中包含了这个实
资源推荐
资源详情
资源评论
python机器学习:推荐系统实现(以矩阵分解来协同过滤)机器学习:推荐系统实现(以矩阵分解来协同过滤)
原文链接:原文链接:http://tecdat.cn/?p=10911
用户和产品的潜在特征编写推荐系统矩阵分解工作原理使用潜在表征来找到类似的产品。
1. 用户和产品的潜在特征用户和产品的潜在特征
我们可以通过为每个用户和每部电影分配属性,然后将它们相乘并合并结果来估计用户喜欢电影的程度。
然后我们使用pandas数据透视表函数来构建评论矩阵。在这一点上,ratings_df包含一个稀疏的评论阵列。
接下来,我们希望将数组分解以找到用户属性矩阵和我们可以重新乘回的电影属性矩阵来重新创建收视率数据。为此,我们将使用低秩矩阵分
解算法。我已经在matrix_factorization_utilities.py中包含了这个实现。我们将在下一个视频中详细讨论它是如何工作的,但让我们继续使用它。
首先,我们传递了评分数据,但是我们将调用pandas的as_matrix()函数,以确保我们作为一个numpy矩阵数据类型传入。
接下来,这个方法接受一个名为num_features的参数。 Num_features控制为每个用户和每个电影生成多少个潜在特征。我们将以15为起点。这
个函数还有个参数regularization_amount。现在让我们传入0.1。在后面的文章中我们将讨论如何调整这个参数。
函数的结果是U矩阵和M矩阵,每个用户和每个电影分别具有15个属性。现在,我们可以通过将U和M相乘来得到每部电影的评分。但不是使用
常规的乘法运算符,而是使用numpy的matmul函数,所以它知道我们要做矩阵乘法。
结果存储在一个名为predicted_ratings的数组中。最后,我们将predict_ratings保存到一个csv文件。
首先,我们将创建一个新的pandas数据框来保存数据。对于这个数据框,我们会告诉pandas使用与ratings_df数据框中相同的行和列名称。然
后,我们将使用pandas csv函数将数据保存到文件。运行这个程序后可以看到,它创建了一个名为predicted_ratings.csv的新文件。我们可以使
用任何电子表格应用程序打开该文件。
这个数据看起来就像我们原来的评论数据,现在每个单元格都填满了。现在我们评估下每个单个用户会为每个单独的电影评分。例如,我们可
以看到用户3评级电影4,他们会给它一个四星级的评级。现在我们知道所有这些评分,我们可以按照评分顺序向用户推荐电影。让我们看看用
户1号,看看我们推荐给他们的电影。在所有这些电影中,如果我们排除了用户以前评价过的电影,右边34号电影是最高分的电影,所以这是我
们应该推荐给这个用户的第一部电影。当用户观看这部电影时,我们会要求他们评分。如果他们的评价与我们预测的不一致,我们将添加新评
级并重新计算此矩阵。这将有助于我们提高整体评分。我们从中获得的评分越多,我们的评分阵列中就会出现的孔越少,我们就有更好的机会
为U和M矩阵提供准确的值。
3. 矩阵分解工作原理矩阵分解工作原理
因为评分矩阵等于将用户属性矩阵乘以电影属性矩阵的结果,所以我们可以使用矩阵分解反向工作以找到U和M的值。在代码中,我们使用称为
低秩矩阵分解的算法,去做这个。我们来看看这个算法是如何工作的。矩阵分解是一个大矩阵可以分解成更小的矩阵的思想。所以,假设我们
有一个大的数字矩阵,并且假设我们想要找到两个更小的矩阵相乘来产生那个大的矩阵,我们的目标是找到两个更小的矩阵来满足这个要求。
如果您碰巧是线性代数的专家,您可能知道有一些标准的方法来对矩阵进行因式分解,比如使用一个称为奇异值分解的过程。但是,这是有这
么一个特殊的情况下,将无法正常工作。问题是我们只知道大矩阵中的一些值。大矩阵中的许多条目是空白的,或者用户还没有检查特定的电
影。所以,我们不是直接将评级数组分成两个较小的矩阵,而是使用迭代算法估计较小的矩阵的值。我们会猜测和检查,直到我们接近正确的
答案。哎哎等等, 咋回事呢?首先,我们将创建U和M矩阵,但将所有值设置为随机数。因为U和M都是随机数,所以如果我们现在乘以U和
M,结果是随机的。下一步是检查我们的计算评级矩阵与真实评级矩阵与U和M的当前值有多不同。但是我们将忽略评级矩阵中所有没有数据的
点,只看在我们有实际用户评论的地方。我们将这种差异称为成本。成本就是错误率。接下来,我们将使用数字优化算法来搜索最小成本。数
值优化算法将一次调整U和M中的数字。目标是让每一步的成本函数更接近于零。我们将使用的函数称为fmin_cg。它搜索使函数返回最小可能
输出的输入。它由SciPy库提供。最后,fmin_cg函数将循环数百次,直到我们得到尽可能小的代价。当成本函数的价值如我们所能得到的那样
低,那么U和M的最终值就是我们将要使用的。但是因为它们只是近似值,所以它们不会完全完美。当我们将这些U矩阵和M矩阵相乘来计算电
影评级时,将其与原始电影评级进行比较,我们会看到还是有一些差异。但是只要我们接近,少量的差异就无关紧要了。
4. 使用潜在特征来找到类似的产品
资源评论
weixin_38730201
- 粉丝: 4
- 资源: 924
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功