资源简介
协同过滤算法代码 VS下运行 数据集采用MovieLens
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int ITERM_SIZE=1682;
const int USER_SIZE=943;
const int V=15; //ITERM的最近邻居数
const int S=10; //USER的最近邻居数
struct MyPair{
int id;
double value;
MyPair(int i=0double v=0):id(i)value(v){}
};
struct cmp{
bool operator() (const MyPair & obj1const MyPair & obj2)const{
return obj1.value < obj2.value;
}
};
double rate[USER_SIZE][ITERM_SIZE]; //评分矩阵
MyPair nbi[ITERM_SIZE][V]; //存放每个ITERM的最近邻居
MyPair nbu[USER_SIZE][S]; //存放每个USER的最近邻居
double rate_avg[USER_SIZE]; //每个用户的平均评分
//从文件中读入评分矩阵
int readRate(string filename){
ifstream ifs;
ifs.open(filename.c_str());
if(!ifs){
cout<<“error:unable to open input file “< return -1;
}
string line;
while(getline(ifsline)){
string str1str2str3;
istringstream strstm(line);
strstm>>str1>>str2>>str3;
int userid=atoi(str1.c_str());
int itermid=atoi(str2.c_str());
double rating=atof(str3.c_str());
//cout << str1<<“ “< //break;
rate[userid-1][itermid-1]=rating;
line.clear();
}
ifs.close();
return 0;
}
//计算每个用户的平均评分
void getAvgRate(){
for(int i=0;i double sum=0;
for(int j=0;j sum+=rate[i][j];
rate_avg[i]=sum/ITERM_SIZE;
}
}
//计算两个向量的皮尔森相关系数
double getSim(const vector &vec1const vector &vec2){
int len=vec1.size();
assert(len==vec2.size());
double sum1=0;
double sum2=0;
double sum1_1=0;
double sum2_2=0;
double sum=0;
for(int i=0;i sum+=vec1[i]*vec2[i];
sum1+=vec1[i];
sum2+=vec2[i];
sum1_1+=vec1[i]*vec1[i];
sum2_2+=vec2[i]*vec2[i];
}
double ex=sum1/len;
double ey=sum2/len;
double ex2=sum1_1/len;
double ey2=sum2_2/len;
double exy=sum/len;
double sdx=sqrt(ex2-ex*ex);
double sdy=sqrt(ey2-ey*ey);
assert(sdx!=0 && sdy!=0);
double sim=(exy-ex*ey)/(sdx*sdy);
return sim;
}
//计算每个ITERM的最近邻
void getNBI(){
for(int i=0;i vector vec1;
priority_queuecmp> neighbour;
for(int k=0;k vec1.push_back(rate[k][i]);
for(int j=0;j if(i==j)
continue;
vector vec2;
for(int k=0;k ve - 上一篇:C语言数据结构迷宫求解的源码
- 下一篇:C++标准库chm
相关资源
- 国际象棋的qt源代码
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C流程图生成器,用C语言代码 生成C语
- C++纯文字DOS超小RPG游戏
- 小甲鱼C语言课件 源代码
- 学校超市选址问题(数据结构C语言版
- VC++MFC小游戏实例教程(实例)+MFC类库
- c语言看发的网络协议 ,源代码
- LU分解法解线性方程组的C语言代码
- 手机话费管理系统(c语言编写)
- C语言实现的DES对称加密算法
- 数据结构,迷宫问题C语言版源代码
- C语言 学生信息管理系统 源代码
- C语言版3D魔方游戏源代码
- 编译原理实验-词法分析(c语言代码)
- C语言中 文件读取和写入的详细操作代
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
川公网安备 51152502000135号
评论
共有 条评论