基于用户的协同过滤算法 UserCF流程图

2019-02-20 22:58

UserCF算法主要流程:

开始输入K(取k个最近邻居)将据集拆分为测试集test和训练集trainuser计算用户之间的相似性,获得用户相似性矩阵usersim用户相似性矩阵排序,获得排好序的用户相似性矩阵simiUser通过k个最近邻,计算用户对物品兴趣程度的矩阵trainuserItem通过物品兴趣程度,推荐前N个计算召回率、准确率和覆盖率结束

主要全局变量:

const int usersum = 6040; //用户总数 const int itemsum =3952; //项目总数

const int N =10; //为用户推荐前N个物品

int trainuser[usersum][itemsum]={0}; //训练集合user item rate矩阵 int test[usersum][itemsum]={0}; //测试集合user item rate矩阵 struct _simi { double value; //相似值 int num; //相似用户号 };

_simi simiUser[usersum][usersum]; //排序后的相似性矩阵 double trainuserItem[usersum][itemsum]={0.0}; // user item 兴趣程度 矩阵 int recommend[usersum][N]={0}; //为每个用户推荐N个物品

拆分数据集函数int SplitData(int m, int k) 主要流程:

将数据集拆分为测试集test和训练集trainuser,其中1/m为测试集,取不同的k<=m-1值 在相同的随即种子下可得到不同的测/训集合

开始打开数据集是否成功打开Y到达文件末尾NN提示“open datasetfile failed”Y寻找数据集每条记录对应的用户号usernum和物品号itemnumNusernum<=usersumtemnum<=itemsumYNrand()%m==kY1←test[usernum-1][itemnum-1]1←trainuser[usernum-1][itemnum-1]关闭文件结束

计算用户之间相似度函数double Simility(int* Ua, int*Ub)主要流程: 计算用户Ua和Ub的相似性,返回值为Ua和Ub的相似度

开始0←comItem(Ua与Ub共有项个数)0.0←simility,0←countUa,0←countUb0←ii0&&Ub[i]>0YcomItem++Ua[i]>0YcountUa++Ub[i]>0YcountUb++i++simility ← comItem/sqrt(countUa*countUb)返回similityNNNN结束

用户相似性矩阵排序函数int sort(double *simArr,_simi *simStruct)主要流程: 根据相似性由高到低排序,每行第一个是自己

开始{0}←finflag[usersum],0←m,0←iNisimArr[maxnum] && finflag[j]==0Y j ← maxnumj++maxnum←simStruct[m].numsimArr[maxnum]←simStruct[m].value 1←finflag[maxnum] ,m++i++结束

用户i对物品j预测兴趣程度函数double getUserLikeItem(int i,int j,int k)主要流程:

利用k个最近邻来计算

开始1←xx<=kYtrainuser[simiUser[i][x].num][j]>0YtrainuserItem[i][j]+=simiUser[i][x].valuex++返回trainuserItem[i][j]NN结束

推荐函数int getRecommend()主要流程: 通过物品兴趣程度,推荐前N个

开始0←ii


基于用户的协同过滤算法 UserCF流程图.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:七年级第二学期数学周周练(第2周)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: