-
大小: 11.8MB文件类型: .zip金币: 1下载: 0 次发布日期: 2023-08-05
- 语言: 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-mytest\Debug\
文件 258132 2012-11-21 19:24 基于图的推荐算法\gh-mytest\Debug\test1.exe
文件 518084 2012-11-21 19:24 基于图的推荐算法\gh-mytest\Debug\test1.ilk
文件 18172 2012-11-21 19:24 基于图的推荐算法\gh-mytest\Debug\test1.obj
文件 298748 2012-11-21 19:06 基于图的推荐算法\gh-mytest\Debug\test1.pch
文件 599040 2012-11-21 19:24 基于图的推荐算法\gh-mytest\Debug\test1.pdb
文件 9033 2012-10-28 15:35 基于图的推荐算法\gh-mytest\Debug\testfile.obj
文件 66560 2012-11-21 19:24 基于图的推荐算法\gh-mytest\Debug\vc60.idb
文件 69632 2012-11-21 19:24 基于图的推荐算法\gh-mytest\Debug\vc60.pdb
目录 0 2012-11-24 10:28 基于图的推荐算法\gh-mytest\Release\
文件 65536 2012-11-22 14:46 基于图的推荐算法\gh-mytest\Release\test1.exe
文件 8723 2012-11-22 14:46 基于图的推荐算法\gh-mytest\Release\test1.obj
文件 304164 2012-11-21 19:25 基于图的推荐算法\gh-mytest\Release\test1.pch
文件 33792 2012-11-22 14:46 基于图的推荐算法\gh-mytest\Release\vc60.idb
文件 24594131 2003-02-28 15:53 基于图的推荐算法\gh-mytest\ratings.dat
文件 8996 2012-11-22 14:10 基于图的推荐算法\gh-mytest\test1.cpp
文件 3389 2012-11-21 16:17 基于图的推荐算法\gh-mytest\test1.dsp
文件 48640 2012-11-21 16:17 基于图的推荐算法\gh-mytest\test1.opt
文件 735 2012-11-22 14:46 基于图的推荐算法\gh-mytest\test1.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\test1.obj
文件 2009168 2012-11-22 19:02 基于图的推荐算法\gh-mytest1多线程\Debug\test1.pch
文件 1270784 2012-11-22 19:02 基于图的推荐算法\gh-mytest1多线程\Debug\test1.pdb
文件 9033 2012-10-28 15:35 基于图的推荐算法\gh-mytest1多线程\Debug\testfile.obj
文件 222208 2012-11-22 19:02 基于图的推荐算法\gh-mytest1多线程\Debug\vc60.idb
............此处省略15个文件信息
评论
共有 条评论