本人菜鸟,对天池数据写点小理解。天池数据不同于一般的评分数据,有几点比较主要:天池数据存在同用户对同物品的不同操作,这和SVD相背,所以数据处理这块非常重要。又根据啊里的背景来看,会发现数据存在这样一个内部关系。购买的物品必然受到点击到购物车,那么这个时候购物车的分析意义有多大?值得商榷。同时那么多的点击次数是因为对找个商品有购买欲望?还是因为购买过来看看价格波动?同时淘宝的数据存在这样一个问题,例如我买的小零食可以出现多次购买,但是购买例如电脑、冰箱这种大物件基本存在二次购买的几率比较小。而数据经过加密处理,这种情况怎么考虑?等等。其这篇文章主要还是一贯作风,贴代码,留个纪念。效果不是很好,F1只有6.4.仅当纪念。

#include <iostream>
#include <cstring>
#include <fstream>
#include <map>
#include <vector>using namespace std;void load(string);
void train(vector<int>,vector<int>,vector<int>,int);
void ComM(vector<int>,vector<int>,vector<int>);
void ComR(vector<int>,vector<int>,vector<int>);
void TopN(vector<map<vector<int>,double> >);
double W1 = 1;
double W2 = 1;map<vector<int>,double> predictScore(int,vector<int>,vector<int>,int);
vector<int> U,I,R;
vector<int> MinRc,MaxRc,MaxRv,MinRv,MaxRp,MinRp,MaxRg,MinRg;
map<vector<int>,int> RCui,RVui,RPui,RGui;
vector<map<vector<int>,double> > result;int step = 1;int main()
{string trains_file = "/home/ja/CADATA/ALI/data/New/trains_tmp.dat";load(trains_file);ComM(U,I,R);string train_file = "/home/ja/CADATA/ALI/data/New/trains.dat";load(train_file);ComR(U,I,R);for(size_t i=0;i<step;i++){train(U,I,R,W1);}U.clear();I.clear();R.clear();RCui.clear();RVui.clear();RPui.clear();RGui.clear();string train_file_1 = "/home/ja/CADATA/ALI/data/New/test_s.dat";load(train_file_1);ComR(U,I,R);for(size_t i=0;i<step;i++){train(U,I,R,W2);}TopN(result);return 0;
}void TopN(vector<map<vector<int>,double> > r){ofstream out("/home/ja/CADATA/ALI/data/New/result/result.dat");for(size_t i=0;i<r.size();i++){for(map<vector<int>,double>::iterator it=r[i].begin();it!=r[i].end();++it){out << it->first[0] << "\t" << it->first[1] << "\t" << it->second << endl;}}
}map<vector<int>,double> predictScore(int user,vector<int> item,vector<int> rating,int index,int w){map<vector<int>,double> TMPc,TMPv,TMPp,TMPg,Tmpresult;for(map<vector<int>,int>::iterator it=RCui.begin();it!=RCui.end();++it){if(it->first[0] == index){double t = w * it->second / (MaxRc[index] * 1.0);//double t = it->second / (MaxRc[index] * 1.0);vector<int> tmp;tmp.push_back(index);tmp.push_back(it->first[1]);TMPc[tmp] += t;//cout << it->second<< "--" << MaxRc[index]<< "--" << t <<endl;
        }}for(map<vector<int>,int>::iterator it=RVui.begin();it!=RVui.end();++it){if(it->first[0] == index){double t = w * it->second / (MaxRv[index]* 1.0);vector<int> tmp;tmp.push_back(index);tmp.push_back(it->first[1]);TMPv[tmp] += t;}}for(map<vector<int>,int>::iterator it=RPui.begin();it!=RPui.end();++it){if(it->first[0] == index){double t = w * it->second / (MaxRp[index] * 1.0);//double t = it->second / (MaxRp[index] * 1.0);vector<int> tmp;tmp.push_back(index);tmp.push_back(it->first[1]);TMPp[tmp] += t;}}for(map<vector<int>,int>::iterator it=RGui.begin();it!=RGui.end();++it){if(it->first[0] == index){double t = w * it->second / (MaxRg[index] * 1.0);//double t = it->second / (MaxRg[index] * 1.0);vector<int> tmp;tmp.push_back(index);tmp.push_back(it->first[1]);TMPg[tmp] += t;}}map<vector<int>,double> TmpVv,TmpPp,TmpGg,TmpPpp,TmpGgg,TmpGggg;for(map<vector<int>,double>::iterator it=TMPc.begin();it!=TMPc.end();++it){double score = it->second;for(map<vector<int>,double>::iterator itt=TMPv.begin();itt!=TMPv.end();++itt){if(it->first[0] == itt->first[0] ){if(it->first[1] == itt->first[1]){score += itt->second;}else{vector<int> tmp;tmp.push_back(itt->first[0]);tmp.push_back(itt->first[1]);TmpVv[tmp] = itt->second;score += 0;}}}for(map<vector<int>,double>::iterator itt=TMPp.begin();itt!=TMPp.end();++itt){if(it->first[0] == itt->first[0] ){if(it->first[1] == itt->first[1]){score += itt->second;}else{vector<int> tmp;tmp.push_back(itt->first[0]);tmp.push_back(itt->first[1]);TmpPp[tmp] = itt->second;score += 0;}}}for(map<vector<int>,double>::iterator itt=TMPg.begin();itt!=TMPg.end();++itt){if(it->first[0] == itt->first[0] ){if(it->first[1] == itt->first[1]){score += itt->second;}else{vector<int> tmp;tmp.push_back(itt->first[0]);tmp.push_back(itt->first[1]);TmpGg[tmp] = itt->second;score += 0;}}}vector<int> tmp;tmp.push_back(it->first[0]);tmp.push_back(it->first[1]);Tmpresult[tmp] += score;}double size = Tmpresult.size();if(TmpVv.size() != 0){for(map<vector<int>,double >::iterator it = TmpVv.begin();it!=TmpVv.end();++it){double score = it->second;for(map<vector<int>,double>::iterator itt=TmpPp.begin();itt!=TmpPp.end();++itt){if(it->first[0] == itt->first[0]){if(it->first[1] == itt->first[1]){score += itt->second;}else{vector<int> tmp;tmp.push_back(itt->first[0]);tmp.push_back(itt->first[1]);TmpPpp[tmp] = itt->second;score += 0;}}}for(map<vector<int>,double>::iterator itt=TmpGg.begin();itt!=TmpGg.end();++itt){if(it->first[0] == itt->first[0] ){if(it->first[1] == itt->first[1]){score += itt->second;}else{vector<int> tmp;tmp.push_back(itt->first[0]);tmp.push_back(itt->first[1]);TmpGgg[tmp] = itt->second;score += 0;}}}vector<int> tmp;tmp.push_back(it->first[0]);tmp.push_back(it->first[1]);Tmpresult[tmp] += score;}}if(TmpPp.size() != 0){for(map<vector<int>,double >::iterator it = TmpPpp.begin();it!=TmpPpp.end();++it){double score = it->second;for(map<vector<int>,double>::iterator itt=TmpGgg.begin();itt!=TmpGgg.end();++itt){if(it->first[0] == itt->first[0] ){if(it->first[1] == itt->first[1]){score += itt->second;}else{vector<int> tmp;tmp.push_back(itt->first[0]);tmp.push_back(itt->first[1]);TmpGggg[tmp] = itt->second;score += 0;}}}vector<int> tmp;tmp.push_back(it->first[0]);tmp.push_back(it->first[1]);Tmpresult[tmp] += score;}}if(TmpGggg.size() != 0){for(map<vector<int>,double >::iterator it = TmpGggg.begin();it!=TmpGggg.end();++it){double score = it->second;vector<int> tmp;tmp.push_back(it->first[0]);tmp.push_back(it->first[1]);Tmpresult[tmp] += score;}}
/*if(size != result.size()){cout << (size - result.size()) << endl;}
*/return Tmpresult;
}void train(vector<int> User,vector<int> Item,vector<int> Rating,int W){map<vector<int>,double> Score;//for(size_t i=0;i<User.size();i++){for(size_t i=0;i<884;i++){Score = predictScore(User[i],Item,Rating,i,W);result.push_back(Score);}
}void ComR(vector<int> User,vector<int> Item,vector<int> Rating){for(size_t i=0;i<User.size()-1;i++){if(Rating[i] == 0){if(User[i] == User[i+1] && Item[i] == Item[i+1]){vector<int> tmp;tmp.push_back(User[i]);tmp.push_back(Item[i]);RCui[tmp] += 1;}else{vector<int> tmp;tmp.push_back(User[i]);tmp.push_back(Item[i]);RCui[tmp] += 1;}}if(i == User.size()-2){vector<int> tmp;tmp.push_back(User[i+1]);tmp.push_back(Item[i+1]);RCui[tmp] += 1;}}for(size_t i=0;i<User.size()-1;i++){if(Rating[i] == 1){if(User[i] == User[i+1] && Item[i] == Item[i+1]){vector<int> tmp;tmp.push_back(User[i]);tmp.push_back(Item[i]);RVui[tmp] += 1;}else{vector<int> tmp;tmp.push_back(User[i]);tmp.push_back(Item[i]);RVui[tmp] += 1;}}}for(size_t i=0;i<User.size()-1;i++){if(Rating[i] == 2){if(User[i] == User[i+1] && Item[i] == Item[i+1]){vector<int> tmp;tmp.push_back(User[i]);tmp.push_back(Item[i]);RPui[tmp] += 1;}else{vector<int> tmp;tmp.push_back(User[i]);tmp.push_back(Item[i]);RPui[tmp] += 1;}}}for(size_t i=0;i<User.size()-1;i++){if(Rating[i] == 3){if(User[i] == User[i+1] && Item[i] == Item[i+1]){vector<int> tmp;tmp.push_back(User[i]);tmp.push_back(Item[i]);RGui[tmp] += 1;}else{vector<int> tmp;tmp.push_back(User[i]);tmp.push_back(Item[i]);RGui[tmp] += 1;}}}
}void ComM(vector<int> User,vector<int> Item,vector<int> Rating){int max = 0;int num = 1;int min = 1000;
/*for(size_t un=0;un<884;un++){for(size_t i=0;i<User.size()-1;i++){if(Rating[i] == 0 && User[i] == un){if(User[i] == User[i+1] && Rating[i] == Rating[i+1] && Item[i] == Item[i+1]){num += 1;if(num > max){max = num;}}else{if(num > max){max = num;}num = 1;}}}MaxRc.push_back(max);num = 1;max = 0;}*/for(size_t un=0;un<884;un++){for(size_t i=0;i<User.size()-1;i++){if(Rating[i] == 0 && User[i] == un){if(User[i] == User[i+1] && Rating[i] == Rating[i+1] && Item[i] == Item[i+1]){num += 1;if(num > max){max = num;}}else{if(num > max){max = num;}num = 1;}}}MaxRc.push_back(max);num = 1;max = 0;}for(size_t un=0;un<884;un++){for(size_t i=0;i<User.size()-1;i++){if(Rating[i] == 1 && User[i] == un){//cout << i << " " << Rating[i] << " " << un << endl;if(User[i] == User[i+1] && Rating[i] == Rating[i+1] && Item[i] == Item[i+1]){num += 1;if(num > max){max = num;}}else{num = 1;if(num > max){max = num;}}}}MaxRv.push_back(max);num = 1;max = 0;}for(size_t un=0;un<884;un++){for(size_t i=0;i<User.size()-1;i++){if(Rating[i] == 2 && User[i] == un){//cout << i << " " << Rating[i] << " " << un << endl;if(User[i] == User[i+1] && Rating[i] == Rating[i+1] && Item[i] == Item[i+1]){num += 1;if(num > max){max = num;}}else{num = 1;if(num > max){max = num;}}}}MaxRp.push_back(max);num = 1;max = 0;}for(size_t un=0;un<884;un++){for(size_t i=0;i<User.size()-1;i++){if(Rating[i] == 3 && User[i] == un){//cout << i << " " << Rating[i] << " " << un << endl;if(User[i] == User[i+1] && Rating[i] == Rating[i+1] && Item[i] == Item[i+1]){num += 1;if(num > max){max = num;}}else{num = 1;if(num > max){max = num;}}}}MaxRg.push_back(max);num = 1;max = 0;}}void load(string file){ifstream fin(file.c_str());if(!fin){cout << "error for fileName" << endl;}int userId,itemId,rating;while(fin >> userId >> itemId >> rating){U.push_back(userId);I.push_back(itemId);R.push_back(rating);}fin.close();
}

转载于:https://www.cnblogs.com/wn19910213/p/3661891.html

阿里巴巴大数据竞赛-天池相关推荐

  1. 阿里巴巴大数据竞赛(2014年3月10日到11月)

    大赛简介 阿里巴巴大数据竞赛是阿里巴巴集团主办,在阿里巴巴大数据科研平台--"天池"上开展的,基于天猫海量真实用户的访问数据的推荐算法大赛. 本次比赛的目的是让广大的高校同学在大数 ...

  2. 阿里巴巴天池大数据竞赛黄金联赛全面开战,全球同步报名,只为寻找最聪明的你!...

    阿里巴巴天池大数据竞赛黄金联赛全面开战,全球同步报名,只为寻找最聪明的你!          天池大数据竞赛是由阿里巴巴集团主办,面向全球新生代力量的高端算法竞赛.通过开放海量数据和"天池& ...

  3. ​阿里云天池工业AI大赛暨中国“印象盐城,数创未来”大数据竞赛正式启动

    记者 | 张俊潇 官网 | www.datayuan.cn 微信公众号ID | datayuancn 10月11日,"2017杭州·云栖大会"在万众期待中盛大召开,会上马云宣布组建 ...

  4. 【TIANCHI】天池大数据竞赛(学习赛)--- 淘宝用户购物行为数据可视化分析

    目录 前言 一.数据集的来源和各个字段的意义 二.数据分析 1.引入库 2.读入数据 3.查看数据数量级 4.PV(Page View)/UV访问量 5.漏斗模型 6.用户购买商品的频次分析. 7.A ...

  5. AI比赛-NER:“万创杯”中医药天池大数据竞赛——中药说明书实体识别挑战

    大赛概况 疫情催化下,人工智能正在持续助力中医药传承创新加速发展,其中中医用药知识体系沉淀挖掘是一个基础工作.通过挖掘中药说明书构建中药合理用药的知识图谱,将为中医规范诊疗奠定较好基础.挑战旨在通过抽 ...

  6. AI大数据竞赛平台和网站

    http://2021全国大学生大数据竞赛含金量如何? - DataCastle数据城堡的回答 - 知乎 https://www.zhihu.com/question/490822570/answer ...

  7. 【数据竞赛】2020年11月国内大数据竞赛信息-奖池5000万

    2020年11月:下面是截止到2020年11月国内还在进行中的大数据比赛题目,非常丰富,大家选择性参加,初学者可以作为入门练手,大佬收割奖金,平时项目不多的,比赛是知识非常好的实践方式,本号会定期发布 ...

  8. 连载:阿里巴巴大数据实践—数据开发平台

    简介:介绍MaxCompute和阿里巴巴内部基于MaxCompute的大数据开发套件,并对在数据开发过程中经常遇到的问题和相关解决方案进行介绍. 前言: -更多关于数智化转型.数据中台内容请加入阿里云 ...

  9. 开放下载!《阿里巴巴大数据及AI实战》深度解析典型场景大数据实践

    来源:开发者社区 本文约2000字,建议阅读5分钟. 阿里经济体大数据及AI典型场景最佳实践全揭秘.2019不容错过的大数据实战手册--<阿里巴巴大数据及AI实战>现在可以免费下载阅读啦! ...

  10. 阿里巴巴大数据之路——数据模型篇

    阿里巴巴大数据之路--数据模型篇 一.概述 1.什么是数据模型? 数据模型就是数据的组织和存储方法.主要关注的是从业务.数据存取和使用角度合理存储数据. 2.典型数据仓库建模方法论 ER模型 纬度模型 ...

最新文章

  1. 发布|CES 2019 科技趋势(附40页PPT)
  2. 在SAP Cloud Platform ABAP编程环境里打印系统变量
  3. 008. 限制上传文件的大小
  4. Win10怎么禁用系统更新服务 Win10禁用系统更新服务教程
  5. oracle格式化列宽度,ORACLE日期时间的格式化参数大全
  6. java erlang 游戏_游戏中最近可达点(用erlang写一个简单算法)
  7. Java多线程学习九:如何正确关闭线程池?shutdown 和 shutdownNow 的区别
  8. C++中的long long和__int64类型(转载)
  9. Codeforces Educational Codeforces Round 3 D. Gadgets for dollars and pounds 二分,贪心
  10. Android 游戏引擎汇总
  11. i18n调用自己参数_Spring Boot :I18N
  12. mysql临时表关联查询_MySQL如何执行关联查询
  13. PHP动态网站开发期末试卷,《PHP动态网站开发实例教程》课程考核方案
  14. 2017 Multi-University Training Contest 3 solutions BY 洪华敦
  15. java计算机毕业设计即时高校信息发布系统源码+mysql数据库+系统+lw文档+部署
  16. 股权、期权和原始股傻傻分不清楚?一文帮你安排的明明白白!
  17. 读写mp3,flac等音乐文件媒体信息
  18. 四羧基锌酞菁(ZnC4Pc),Zn-taPc 酞菁类化合物,齐岳生物供应酞菁材料
  19. 扫描子网中的地址+Pings模拟
  20. JavaScript深入浅出第5课:Chrome是如何成功的?

热门文章

  1. LayoutInflater原理分析
  2. 安鸾靶场--暴力破解
  3. Windows7 问题集 - McAfee、迷你迅雷、Dropbox
  4. ApacheCN 活动汇总 2019.6.28
  5. 计算机提示pdf不能加载,打开电脑中的PDF文档无法显示内容提示Please wait怎么解决...
  6. html 限制文本框的长度,JavaScript 限制文本框输入长度(支持字符限制)
  7. 桌面计算机怎么设置时钟同步,电脑进入屏保后怎么设定让时间显示在萤幕上
  8. Java并发编程(十七)Java并发包中原子操作类原理
  9. smartprinter注册版_SmartPrinter下载 4.2 共享版
  10. cruzer php sandisk 闪迪u盘量产工具_sandisk cruzer 32G U盘量产工具下载