个性化服务推荐.docx

个性化服务推荐.docx

ID:51009616

大小:27.16 KB

页数:28页

时间:2020-03-17

上传者:U-3183
个性化服务推荐.docx_第1页
个性化服务推荐.docx_第2页
个性化服务推荐.docx_第3页
个性化服务推荐.docx_第4页
个性化服务推荐.docx_第5页
资源描述:

《个性化服务推荐.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

基于二部图的个性化系统推荐:#include#include#include#include#include#include#includeusingnamespacestd;//从TXT中读入数据到矩阵(二维数组)templatevector>txtRead(stringFilePath,introw,intcol){ifstreaminput(FilePath);if(!input.is_open()){cerr<<"Fileisnotexisting,checkthepath: "<>data(row,vector(col,0));for(inti=0;i>data[i][j];if(data[i][j]>=3)data[i][j]=1;elsedata[i][j]=0;}}returndata;}//把矩阵中的数据写入TXT文件templatevoidtxtWrite(vector>Matrix,stringdest){ ofstreamoutput(dest);vector>::size_typerow=Matrix.size();vector::size_typecol=Matrix[0].size();for(vector>::size_typei=0;i::size_typej=0;jA,std::vectorB){doubleres=0;for(std::vector::size_typei=0;i//vector>Transpose(vector>Matrix){unsignedrow=Matrix.size();unsignedcol=Matrix[0].size();vector>Trans(col,vector(row,0));for(unsignedi=0;i TSumVector(vectorvec){Tres=0;for(vector::size_typei=0;i=b;}vectorDescendVector(vectorvec){vectortmpVec=vec;sort(tmpVec.begin(),tmpVec.end(),IsBigger);vectoridx;for(vector::size_typei=0;i::size_typej=0;j>ProbS(vector>data){autorow=data.size();autocol=data[0].size();vector>transData=Transpose(data);//第一步利用概率传播机制计算权重矩阵vector>weights(col,vector(col,0));for(vector::size_typei=0;i::size_typej=0;j(transData[j]);doublesum=0;for(vector::size_typek=0;k(data[k]);}if(degree)weights[i][j]=sum/degree;}}//第二步利用权重矩阵和训练数据集针对每个用户对每一个item评分vector>scores(row,vector(col,0));for(vector::size_typei=0;i::size_typej=0;j>ComputeHitRate(vector>scores,vector>test,unsignedlength){autousersNum=test.size();autoitemsNum=test[0].size();vector>sortedIndex;//因为只是对测试集中的用户和items进行测试,于是选取与测试集大小一样的预测数据vector>selectedScores(usersNum,vector(itemsNum,0));vectorline;for(unsignedi=0;i>hitRate(length);for(unsignedk=1;k<=length;++k){hitRate[k-1].push_back(k);doubleCounter=0;for(unsignedi=0;i>train=txtRead(FilePath1,row,col);//vector>test=txtRead(FilePath2,462,1591);cout<<"利用二部图网络进行评分预测..."<>predictScores=ProbS(train);txtWrite(predictScores,"predictScores.txt");/*cout<<"计算命中率..."<>hitRate=ComputeHitRate(predictScores,test,1591);txtWrite(hitRate,"hitRate.txt");cout<<"命中率结果保存完毕!"<#include#include#include#include#include#include#include#include#include usingnamespacestd;constintMAX=1000;classUserCF{private:intk,m;//k:themostkpersonsinterestedinthebrandi;m:choosetheformermbrandswhichuseruaremostinterestedinmapuserid_id;mapid_userid;map>user_brands;map>id_brands;map>brand_ids;setbrand_all;map>user_brand_rec;ifstreamfin;ofstreamfout;doublesim_mat[MAX][MAX];typedefstructsim_idx{ doublesim;intidx;booloperator>(constsim_idx&other)const{returnsim>other.sim;}}sim_idx;typedefstructbrand_interest{doubleInt;//Int=interestintbrand;booloperator>(constbrand_interest&other)const{returnInt>other.Int;}}brand_interest;public:UserCF(int_k,int_m):k(_k),m(_m){fin.open("user_brand_m123.txt");fout.open("rec_result_by_m123.txt"); if(!fin||!fout){cout<<"cannotopenthefile"<>userid>>brandid){if(user_brands[userid].empty()){userid_id[userid]=i;id_userid[i]=userid;i++;}user_brands[userid].insert(brandid);brand_all.insert(brandid);}//id_brandsmap>::iteratorit=user_brands.begin(); while(it!=user_brands.end()){id_brands[userid_id[it->first]]=it->second;it++;}bzero(sim_mat,0);}voidget_sim_mat(){get_reverse_table();map>::iteratorit=brand_ids.begin();while(it!=brand_ids.end()){vectortmp(it->second.begin(),it->second.end());intlen=tmp.size();//foreachbrand,traversealltwopairusers,sim_matincrementfor(inti=0;i>::iteratorit=id_brands.begin();while(it!=id_brands.end()){settmp=it->second; set::iteratorit2=tmp.begin();while(it2!=tmp.end()){brand_ids[*it2].insert(it->first);it2++;}it++;}}setget_rec_brand_set_by_user(intuserid){//3.1setbrand_unused;/*set_difference:finddifferentsetbetweentwoset*function:getbrandsetthatuseridhasneverboughtbefore*/set_difference(brand_all.begin(),brand_all.end(),user_brands[userid].begin(),user_brands[userid].end(),inserter(brand_unused,brand_unused.begin())); sim_idxsimidx;vectorvec_sim_idx;intlen=userid_id.size();intid=userid_id[userid];for(inti=0;i());//orderbydesc//3.2.1setrec_ids;vector::iteratorit=vec_sim_idx.begin();for(inti=0;irec_brand;set::iteratoritt=brand_unused.begin();vectorvec_bi;//userid'sinterestleveltowardbrandbrand_interestbi;while(itt!=brand_unused.end()){//3.2.2vectornewset;//orsetnewsetsetids=brand_ids[*itt];set_intersection(rec_ids.begin(),rec_ids.end(),ids.begin(),ids.end(),inserter(newset,newset.begin()));if(newset.empty()){itt++;continue;}doubleinterest=0.0;intlen=newset.size();for(inti=0;i());//感谢@chenyadong的修改建议,这行代码要进行添加//3.3for(inti=0;i::iteratorit=userid_id.begin();while(it!=userid_id.end()){user_brand_rec[it->first]=get_rec_brand_set_by_user(it->first);it++;}}//recommendvoidprint(){//writerecommendationresulttofilemap>::iteratorit=user_brand_rec.begin();while(it!=user_brand_rec.end()){settmp=it->second;set::iteratorit2=tmp.begin();while(it2!=tmp.end()){ fout<first<<""<<*it2<#include#include#include#includeusingnamespacestd;intmain(){ifstreamfin,fin1;fin.open("rec_result_by_m123.txt");fin1.open("user_brand_m4.txt");if(!fin||!fin1){cout<<"cannotopenfile"<>fore_user_brands;//recommendationresult map>real_user_brands;//realresultintuser,brand;while(fin>>user>>brand){fore_user_brands[user].insert(brand);}while(fin1>>user>>brand){real_user_brands[user].insert(brand);}doubleprecision=0,recall=0;doublefore_total_brand=0;doublereal_total_brand=0;doubleintersection=0;doubleF=0;map>::iteratorit=fore_user_brands.begin();map>::iteratoritt=real_user_brands.begin();while(it!=fore_user_brands.end()){ fore_total_brand+=(it->second).size();it++;}while(itt!=real_user_brands.end()){real_total_brand+=(itt->second).size();itt++;}it=fore_user_brands.begin();while(it!=fore_user_brands.end()){setfore,real,newset;fore=it->second;real=real_user_brands[it->first];//set_intersection:getintersectionoftwosetsset_intersection(fore.begin(),fore.end(),real.begin(),real.end(),inserter(newset,newset.begin()));intersection+=newset.size();if(newset.size()!=0){ set::iteratoritnew=newset.begin();cout<<"user:"<first<<"brand:";while(itnew!=newset.end()){cout<<*itnew<<"";itnew++;}cout<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭