基于物品的协同过滤推荐算法 c++实现 源码


基于邻域推荐算法中,基于物品的协调过滤推荐算法 itemCF 的visual c++ 的实现代码,MovieLens数据集。
资源截图
代码片段和文件信息
#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 int N = 10;
char datasetfile[100] = “E:\mytest\ratings.dat“; 
int train[itemsum][usersum]={0}; //训练集合user item rate矩阵
int test[itemsum][usersum]={0};    //测试集合user item rate矩阵
double trainuseritem[usersum][itemsum]={0.0};//训练集合user item 兴趣程度 矩阵
int recommend[usersum][N]={0};  //为每个用户推荐N个物品
struct simi
{
double value; //相似值 
int num;  //相似物品号 
};
simi simiItem[itemsum][itemsum]; //排序后的相似性矩阵

//第一步,拆分数据集为测试集test和训练集train,其中1/m为测试集取不同的k<=m-1值 在相同的随即种子下可得到不同的测/训集合
int SplitData(int m int k);
//寻找数据集每条记录对应的用户号和物品号
int Buf_UIR(char* bufint* user int* item);
double Simility(int* ItemA int* ItemB);    //第二步,计算物品之间的相似性,获得物品相似性矩阵
int sort(double* simArr simi* simStruct); //第三步,物品相似性矩阵排序(根据相似性由高到低排序)
double getUserLikeItem(int iint jint k); //第四步,得到用户i对物品j预测兴趣程度,利用k个最近邻来计算
int getRecommend();                       //第五步,通过物品兴趣程度,推荐前N个
double Recall();                           //第六步,计算召回率、准确率和覆盖率
double Precision();
double Coverage();
double Diversity(double **a);//计算多样性

int main()
{
int ij;
double recallprecisioncoveragediversity;
int k;        //去用户的k个最近邻居来计算推荐物品
printf(“请输入取最近邻居做计算的个数:k=“);
scanf(“%d“&k);
    //1.初始化数据集
SplitData(81); //随即分配1/8为测试集,其他为训练集
    //输出初始化的矩阵
/*
for (i=0;i<5;i++)
  {
  cout<<“Item“<  for (j=0;j<100;j++)
  {
  cout<  }
  cout<  }
*/

//动态分配内存空间给用物品相似性矩阵
double **itemsim;
itemsim = (double**)malloc(sizeof(double*)*itemsum);
    for(i=0; i {
        itemsim[i] = (double*)malloc(sizeof(double)*itemsum);
    }
//2.计算物品之间相似性,得到相似性矩阵
for (i=0;i {
for (j=0;j {
itemsim[i][j] = Simility(train[i]train[j]);
}
}
//输出物品相似性矩阵
/*
for (i=0;i<5;i++)
  {
  cout<<“Item“<  for (j=0;j<100;j++)
  {
  cout<  }
  cout<  }
*/

//3.物品相似度由高到低排序
for (i=0;i {
//cout<<“Item“< sort(itemsim[i]simiItem[i]);
//cout< }
    //输出排序后的物品相似性矩阵
/*
for(i=0;i<5;i++)
{
cout<<“item“< for(j=0;j<100;j++)
{
cout< }
cout< }
    */
    //4.得到用户对物品兴趣程度的矩阵
for(i=0;i {
for(j=0;j {
if(train[j][i]==0)            //如果用户i对物品j没有过行为,才计算i对j的预测兴趣程度
     trainuseritem[i][j]=getUserLikeItem(ijk);
}
}
//输出用户对物品兴趣的矩阵
/*
for (i=0;i<5;i++)
  {
  cout<<“User“<  for (j=0;j<100;j++)
  {
  cout<  }
  cout<  }
*/

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

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-11-25 18:45  Item-CF实验结果
     文件      410624  2012-11-12 13:42  Item-CF实验结果Item-CF实验结果.doc
     文件      588288  2012-11-22 20:47  Item-CF实验结果ItemCF流程图.doc
     目录           0  2012-11-25 18:44  Item-CF实验结果mytest
     目录           0  2012-11-25 18:44  Item-CF实验结果mytestDebug
     文件      282666  2012-11-10 16:21  Item-CF实验结果mytestDebug est1.exe
     文件      961300  2012-11-10 16:21  Item-CF实验结果mytestDebug est1.ilk
     文件       30862  2012-11-10 17:04  Item-CF实验结果mytestDebug est1.obj
     文件      309284  2012-11-10 12:59  Item-CF实验结果mytestDebug est1.pch
     文件      730112  2012-11-10 15:23  Item-CF实验结果mytestDebug est1.pdb
     文件        9033  2012-10-28 15:35  Item-CF实验结果mytestDebug estfile.obj
     文件      214016  2012-11-10 17:04  Item-CF实验结果mytestDebugvc60.idb
     文件       94208  2012-11-10 17:04  Item-CF实验结果mytestDebugvc60.pdb
     目录           0  2012-11-25 18:44  Item-CF实验结果mytestRelease
     文件     2016256  2012-11-09 14:10  Item-CF实验结果mytestRelease est1.bsc
     文件       69632  2012-11-10 18:24  Item-CF实验结果mytestRelease est1.exe
     文件       11576  2012-11-10 18:24  Item-CF实验结果mytestRelease est1.obj
     文件      313040  2012-11-10 16:31  Item-CF实验结果mytestRelease est1.pch
     文件           0  2012-11-09 14:10  Item-CF实验结果mytestRelease est1.sbr
     文件       50176  2012-11-10 18:24  Item-CF实验结果mytestReleasevc60.idb
     文件    24594131  2003-02-28 15:53  Item-CF实验结果mytest
atings.dat
     文件       10252  2012-11-10 17:00  Item-CF实验结果mytest est1.cpp
     文件        3389  2012-11-10 17:04  Item-CF实验结果mytest est1.dsp
     文件         516  2012-11-10 18:31  Item-CF实验结果mytest est1.dsw
     文件       50176  2012-11-23 16:08  Item-CF实验结果mytest est1.ncb
     文件       48640  2012-11-23 16:08  Item-CF实验结果mytest est1.opt
     文件         841  2012-11-10 18:24  Item-CF实验结果mytest est1.plg

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

发表评论

评论列表(条)