没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.引言 矩阵分解(MatrixFactorization,MF)是传统推荐系统为经典的算法,思想来源于数学中的奇异值分解(SVD),但是与SVD还是有些不同,形式可以看出SVD将原始的评分矩阵分解为3个矩阵,而推荐本文要介绍的MF是直接将一个矩阵分解为两个矩阵,一个包含Users的因子向量,另一个包含着Items的因子向量。 2.原理简介 假如电影分为三类:动画片,武打片,纪录片,而某一部电影对应这三类的隶属度分别为0,0.2,0.7,可以看出这是一部纪录片里面有些武打成分,现在给定某个用户对着三类电影的喜欢程度用0到1之间的值表示分别为0.1,0.6,0.2,可以看出该用
资源推荐
资源详情
资源评论
推荐系统之矩阵分解及推荐系统之矩阵分解及C++实现实现
1.引言
矩阵分解(MatrixFactorization,MF)是传统推荐系统为经典的算法,思想来源于数学中的奇异值分解(SVD),但是与SVD
还是有些不同,形式可以看出SVD将原始的评分矩阵分解为3个矩阵,而推荐本文要介绍的MF是直接将一个矩阵分解为两个
矩阵,一个包含Users的因子向量,另一个包含着Items的因子向量。
2.原理简介
假如电影分为三类:动画片,武打片,纪录片,而某一部电影对应这三类的隶属度分别为0,0.2,0.7,可以看出这是一
部纪录片里面有些武打成分,现在给定某个用户对着三类电影的喜欢程度用0到1之间的值表示分别为0.1,0.6,0.2,可以看
出该用户喜欢武打片,而不怎么喜欢其他两种,于是可以预测用户对刚才的电影打分(喜欢程度)为:
0*0.1+0.2*0.6+0.7*0.2=0.26
矩阵分解的动机来源于此,因为利用用户的历史评分矩阵(参考我的上一篇推荐系统之协同过滤的原理及C++实现),如
果能够得到反映每一用户的对每个Item喜好的因子向量,同时得到每个Item属于每一类的隶属度向量,利用上面的方法很容易
得出每个用户对每个Item的预测评分,利用这个评分的高低可以进行推荐高分的Items给相应的用户了.
例如这个10*10的历史评分矩阵A,可以分解为一个10*5的矩阵B乘以一个5*10的矩阵C,这样可以把B看做是用户偏好矩
阵,里面包含着用户对每一类Items的偏好程度的向量,B的转置看作是包含着衡量每一个Item属于5类的隶属度的向量,当然
这个5可以是自己设定的任意值,但是原则上要求要比原来的矩阵A中的列数或者行数小,起到一个降维的作用。B和C的初始
值可以随机初始化,然后B和C相乘得到评分,与历史真实评分对比,通过梯度下降算法不断调整B和C中的值,使得B和C相
乘后得到的矩阵与真实的历史评分矩阵之间的差别越小越好,终得到较好的B和C可以用来预测用户对任意Item的评分了,更
加详细的解释参考:Matrix_factorization_techniques_for_recommender_systems.pdf
3.实现
本次实现的是一个带偏置的矩阵分解,数据集是movielens.rar,已经处理成了矩阵形式
读取和保存txt数据的头文件
1#ifndefREADANDWRITEDATA_H
2#defineREADANDWRITEDATA_H
3#include<iostream>
4#include<fstream>
5#include<vector>
6#include<string>
7
8usingnamespacestd;
9
10template<typenameT>
11vector<vector<T>>txtRead(stringFilePath,introw,intcol)
12{
13ifstreaminput(FilePath);
14if(!input.is_open())
15{
16cerr<<"Fileisnotexisting,checkthepath:
"<<FilePath<<endl;
17exit(1);
18}
19vector<vector<T>>data(row,vector<T>(col,0));
20for(inti=0;i<row;++i)
21{
22for(intj=0;j<col;++j)
23{
24input>>data[i][j];
25}
26}
27returndata;
28}
29
30template<typenameT>
资源评论
- 小明斗2023-07-25文中不仅对算法进行了解释,还提供了实例和数据,使得学习起来更加有趣和实用。
- 城北伯庸2023-07-25作者通过简洁的代码实现了矩阵分解算法,帮助读者更好地理解它的原理和应用。
- 我要WhatYouNeed2023-07-25最喜欢这个文件的地方是它提供了实际案例,这使我更加相信矩阵分解在推荐系统中的实际应用。
- 曹多鱼2023-07-25作者将推荐系统的复杂概念讲解得通俗易懂,对于初学者来说是一份很好的参考资料。
- 代码深渊漫步者2023-07-25这个文件很详细地介绍了矩阵分解在推荐系统中的应用,让我对这一概念有了更深入的理解。
weixin_38557095
- 粉丝: 2
- 资源: 930
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功