-
大小: 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個文件信息
評論
共有 條評論