资源简介
协同过滤算法代码 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
相关资源
- C++标准库chm
- 聊天+传送文件+设置字体及颜色vs201
- C语言经典程序设计源代码之画图软件
- socket文件传输C++
- 用c++设计一个日期类Date,包括年、月
- VC++ 实现增大可执行文件的体积 自
- 严蔚敏《数据结构》的全部代码实现
- c++ primer plus 第6版 中文版pdf 高清完整
- C++跑酷游戏
- C++简单的画图程序源代码
- c++ builder实现文件粉碎机的源码
- 简单电子英汉词典c++
- C++程序设计语言:第1~3部分原书第4版
- 唯一可译码源代码c语言 含报告
- c++程序设计 谭浩强第二版答案
- c++学生信息管理系统附带报告
- C++builder编写的简单科学计算器
- C++ QT中 通过UDP广播获取网络中所有设
- C语言版拼音输入法源代码
- 课程设计哲学家就餐问题报告+代码
- 51单片机C语言电流电压测量代码
- 网桥自学习算法
- 路由器分组转发算法_计算机通信课程
- C++下操作access数据库
- C++精确定时定时器
- c++链表队列的实现
- 快速Hartley变换C++实现
- 停车场管理问题 C++/C数据结构
- Flappy Bird C语言代码
- C++课设高校人员信息管理系统.doc
评论
共有 条评论