基于图的推荐算法 c,c++ 实现 代码 项亮 随机游走


基于图的推荐算法 c,c++ 实现 代码 项亮 随机游走
资源截图
代码片段和文件信息
#include “math.h“
#include “string.h“
#include “stdlib.h“ 
#include “stdio.h“
#include “iostream.h“
//#include “time.h“         //使用当前时钟做种子


FILE *fp;
const int usersum = 6040;
const int itemsum = 3952;
const double alpha = 0.8;
const int N = 10;
char datasetfile[100] = “E:\mytest\ratings.dat“; 
int train[usersum][itemsum]={0}; //训练集合user item rate矩阵
int test[usersum][itemsum]={0};    //测试集合user item rate矩阵
int recommend[usersum][N]={0};  //为每个用户推荐N个物品


//第一步,拆分数据集为测试集test和训练集trainuser,其中1/m为测试集取不同的k<=m-1值 在相同的随即种子下可得到不同的测/训集合
int SplitData(int m int k);
//寻找数据集每条记录对应的用户号和物品号
int Buf_UIR(char* bufint* user int* item);
//第二步,通过测试集得到top-N=10的推荐列表
void getrecommend();
void getrecommendlist(int usernum double* item); //为用户usernum推荐N个物品
void getitem(double* item int user int* a);  //从用户user开始游走,游走之后将每个物品节点被访问概率存放在以item为首地址的数组中
//第三步,计算召回率、准确率和覆盖率
double Recall();                          
double Precision();
double Coverage();

int main()
{
int ij;
double recallprecisioncoverage;
SplitData(81); //随即分配1/8为测试集,其他为训练集
    //输出初始化的矩阵
  /*
for (i=0;i<5;i++)
  {
  cout<<“User“<  for (j=0;j<100;j++)
  {
  cout<  }
  cout<  }
*/

//通过物品兴趣程度,推荐前N个
getrecommend();
//输出推荐矩阵
for (i=0;i<50;i++)
  {
  cout<<“User“<  for (j=0;j  {
  cout<  }
  cout<  }

    recall=Recall(); //计算召回率
printf(“召回率recall=%lf “recall);
precision=Precision();//计算准确率
printf(“准确率precision=%lf “precision);
coverage=Coverage();//计算覆盖率
    printf(“覆盖率precision=%lf “coverage);

return 1;
}

//拆分数据集为测试集test和训练集train,其中1/m为测试集取不同的k<=m-1值 在相同的随即种子下可得到不同的测/训集合
int SplitData(int m int k)
{
fp=fopen(datasetfile“r“);
char tmpbuf[100]; //暂存文件一行记录
int usernum;
int itemnum;

if (!fp)
{
cout<<“open datasetfile failed“;
return 1;
}
else
{
// srand((unsigned)time(NULL));                  //设置当前时间为随机种子
while (!feof(fp))
{
fgets(tmpbuf100fp);                     //将fp指向的当前记录存到tmpbuf[100]
    Buf_UIR(tmpbuf&usernum&itemnum);        //寻找数据集每条记录对应的用户号和物品号
if (usernum<=usersum&&itemnum<=itemsum)
{
if(rand()%m==k)
   test[usernum-1][itemnum-1] = 1;        //rate为评分,再此实验中只需统计有无评分的,无需讨论具体评分
    else 
   train[usernum-1][itemnum-1] = 1;  //用户号的物品号均从0开始算起,
}
}
  fclose(fp);
}
return 1;
}
//寻找数据集每条记录对应的用户号和物品号
int Buf_UIR(char* bufint* user int* item)
{
char U[20]={0};
char I[20]={0};
char R[20]={0};
char *Temp;
int curpos;
//查找用户号
Temp = strchr(buf‘:‘);
curpos = Temp-buf;
strncpy(Ubufcurpos);
*user = atoi(U);
//查找item号
Temp = strchr(buf+curpos+2‘:‘);
//curpos = Temp - buf;
strncpy(Ibuf+curpos+2Temp-buf-curpos-2);
*item = atoi(I);
return 1;
}


//通过测试集得到top-N的推荐列表
void getrecommend()
{
    int a[itemsum];   //为每个用户推荐时,每个物品节点被访问的总次数
    double item[2][itemsum]={0.

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-01-19 10:30  基于图的推荐算法
     目录           0  2012-11-24 10:28  基于图的推荐算法gh-mytest
     目录           0  2012-11-24 10:28  基于图的推荐算法gh-mytestDebug
     文件      258132  2012-11-21 19:24  基于图的推荐算法gh-mytestDebug est1.exe
     文件      518084  2012-11-21 19:24  基于图的推荐算法gh-mytestDebug est1.ilk
     文件       18172  2012-11-21 19:24  基于图的推荐算法gh-mytestDebug est1.obj
     文件      298748  2012-11-21 19:06  基于图的推荐算法gh-mytestDebug est1.pch
     文件      599040  2012-11-21 19:24  基于图的推荐算法gh-mytestDebug est1.pdb
     文件        9033  2012-10-28 15:35  基于图的推荐算法gh-mytestDebug estfile.obj
     文件       66560  2012-11-21 19:24  基于图的推荐算法gh-mytestDebugvc60.idb
     文件       69632  2012-11-21 19:24  基于图的推荐算法gh-mytestDebugvc60.pdb
     目录           0  2012-11-24 10:28  基于图的推荐算法gh-mytestRelease
     文件       65536  2012-11-22 14:46  基于图的推荐算法gh-mytestRelease est1.exe
     文件        8723  2012-11-22 14:46  基于图的推荐算法gh-mytestRelease est1.obj
     文件      304164  2012-11-21 19:25  基于图的推荐算法gh-mytestRelease est1.pch
     文件       33792  2012-11-22 14:46  基于图的推荐算法gh-mytestReleasevc60.idb
     文件    24594131  2003-02-28 15:53  基于图的推荐算法gh-mytest
atings.dat
     文件        8996  2012-11-22 14:10  基于图的推荐算法gh-mytest est1.cpp
     文件        3389  2012-11-21 16:17  基于图的推荐算法gh-mytest est1.dsp
     文件       48640  2012-11-21 16:17  基于图的推荐算法gh-mytest est1.opt
     文件         735  2012-11-22 14:46  基于图的推荐算法gh-mytest est1.plg
     目录           0  2012-11-24 10:28  基于图的推荐算法gh-mytest1多线程
     文件      247846  2012-11-23 10:25  基于图的推荐算法gh-mytest1多线程111.map
     文件      130959  2012-11-23 10:26  基于图的推荐算法gh-mytest1多线程222.map
     文件      353225  2012-11-23 06:13  基于图的推荐算法gh-mytest1多线程25600.txt
     目录           0  2012-11-24 10:28  基于图的推荐算法gh-mytest1多线程Debug
     文件      168541  2012-11-22 19:02  基于图的推荐算法gh-mytest1多线程Debug est1.obj
     文件     2009168  2012-11-22 19:02  基于图的推荐算法gh-mytest1多线程Debug est1.pch
     文件     1270784  2012-11-22 19:02  基于图的推荐算法gh-mytest1多线程Debug est1.pdb
     文件        9033  2012-10-28 15:35  基于图的推荐算法gh-mytest1多线程Debug estfile.obj
     文件      222208  2012-11-22 19:02  基于图的推荐算法gh-mytest1多线程Debugvc60.idb
............此处省略15个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)