挑战任务

在代码世界中遨游是件妙不可言的故事,给开发者推荐新项目、新用户、新世界,有助于增强开源精神,提高开发者乐趣。本关源于国内知名开源社区的一个真实的业务需求,需要基于“绿色计算产业联盟”和国内某知名开源技术平台真实开发者及开发者活动数据进行兴趣标签的推荐。

本关任务:

利用已有的同现标签数据以及给出的20位开发者技能标签数据,推荐兴趣标签给这20位开发者。

其中,同现标签指的是:“共同出现的标签”。比如,某技术问答帖子的标签为<java>,<spring>,<mybatis>,这三个标签在该帖子的标签集合中共同出现,则称其为同现标签

推荐标签指的是:“根据同现标签的数据和开发者自己的技能标签来推荐给该开发者的标签”,比如,某位开发者的技能标签为<java>,<spring>,根据同现标签数据,可以推荐<mybatis>给开发者。

数据说明

为了完成本次挑战,你需要处理两种类型的数据,第一:同现标签数据,第二:开发者技能标签数据,根据提供的两种数据生成推荐标签数据,并且存放在文件中,关于这三种数据的说明如下:

同现标签数据

我们已经将同现标签存放在tag_cooccurrence.csv文件中了,文件路径为:src/step1/tag_cooccurrence.csv,该文件数据结构如下:

id tags
1 <objective-c>,<app>,<iphone>,<ios>
2 <java>,<jfinal>,<数据库>

字段id为一个自增的整数,增量为1,除了唯一标识这一行的数据外没有其他含义,tags表示同现标签列表,其中包含多个同现标签。

开发者标签数据

我们已经将开发者标签数据存放在user_tag.csv文件中了,文件路径为src/step1/user_tag.csv,文件数据结构如下:

user_id origin_tags tag_value
1 <java>,<spring>,<websocket>,<mybatis>,<redis> [1.0, 0.851, 0.359, 0.336, 0.85]
2 <c#>,<csharp>,<shell>,<html>,<css> [1.0, 0.929, 0.743, 0.74, 0.722]

user_id表示开发者的idorigin_tags表示用户的技能标签集合,tag_value表示用户技能标签对应的权重,权重你可以简单的理解为开发者对于这个技能的熟练度或者关注程度,一个技能标签的权重值越高(最大值为1.0),则表示该开发者对该技能越关注。在推荐时就应该优先推荐权重更高标签的相关标签。

该文件只有20条数据,即你只需要对20名开发者做标签推荐。

推荐标签数据

推荐标签数就是,你要根据同现标签和开发者标签数据生成的数据,也是本次挑战要提交的数据,你必须将计算得出的推荐标签数据存放在文件中,并且命名为:user_recommand.csv,需要存放在src/step1/下才可以评测,即完整路径为:src/step1/user_recommand.csv

其中存储格式举例如下:

id recommand_tags
1 <mvn>,<springmvc>,<numpy>,<pandas>,<Django>
2 <monogodb>,<mysql>,<gradle>
... ...
20 <tensorflow>
  • 字段id为一个自增的整形变量,增量为1
  • 字段recommad_tags为推荐给用户的标签列表,其中每个标签以英文逗号分隔,注意每个标签用尖括号修饰,即java标签是<java>,而不是java
  • 每一行数据代表给对应用户推荐的标签,如:上述表格中给用户id为1的用户推荐的标签为:<mvn>,<springmvc>,<numpy>,<pandas>,<Django>
  • 给用户推荐的标签可以是任意数量。

编程要求

请补充完善右侧代码区域中的func()函数,构建标签推荐系统,实现根据开发者已有标签,完成对20位开发者的标签推荐,每个开发者的标准测试推荐标签为10个,你的推荐标签可以是任意个,参考步骤如下:

  • 读取src/step1/tag_cooccurrence.csv文件和src/step1/user_tag.csv文件;
  • 根据开发者标签和权重值来处理数据;
  • 生成src/step1/user_recommand.csv推荐标签数据文件;
  • 提交评测。

你可以持续优化以获得更高的分数。

注意:我们提供了一些读写csv格式文件的函数和本关涉及到的数据文件,详细介绍请下载源码查看:

https://www.educoder.net/attachments/download/203522/C++BaseLine.zip

评测说明

评测方法

本关得分为:

其中N=20,表示共有20个开发者测试记录;Auc_i表示对每条记录标签推荐的准确率;Recall_i表示对每条记录标签推荐的召回率。下面为具体的准确率和召回率的描述。

参赛选手根据开发者i已有的标签列表{t1,t2,..,t5},推荐n个标签形成集合Ri

R_i=\left \{ r_1,r_2,...,r_n \right \}R​i​​={r​1​​,r​2​​,...,r​n​​}

Ti为测试集中开发者i10个标签组成的集合。

T_i=\left \{ t_6,t_7,...,t_{15} \right \}T​i​​={t​6​​,t​7​​,...,t​15​​}

则开发者i的标签推荐结果准确率Auc_i为:

Auc_i=\frac{\left | R_i\cap T_i \right |}{\left | R_i \right |}Auc​i​​=​∣R​i​​∣​​∣R​i​​∩T​i​​∣​​

召回率为:

Recall=\frac{\left | R_i\cap T_i \right |}{\left | T_i \right |}Recall=​∣T​i​​∣​​∣R​i​​∩T​i​​∣​​

下面对某条开发者记录得分规则进行举例说明。
若参赛选手算出的某一开发者的推荐标签列表R长度为11,其中有3个标签与开发者对应T中的标签一致。则该选手针对该开发者的推荐准确率为3/11,召回率为3/10,因此针对该条记录选手得分为:

\frac{2*3/10*3/11}{3/11+3/10}​3/11+3/10​​2∗3/10∗3/11​​

参考算法

本题在于针对每个开发者标签挖掘其相关的标签进行推荐,可以尝试利用关联规则算法挖掘标签之间的关联规则,将其推荐给目标开发者,在此基础上建议采用FPgrowth挖掘频繁项集加快计算速度,得到关联规则后,针对每个标签关联的其他标签的置信度与该标签对应的权重值计算关联标签的权重值,得到最终的推荐列表。


开始挑战吧,祝你成功!

#include <iostream>using namespace std;/*********************数据说明***********************
* 训练数据:src/step1/tag_cooccurrence.csv
* 测试数据:src/step1/user_tag.csv
* 结果文件:src/step1/user_recommand.csv
****************************************************/
void func()
{
/*********************** BEGIN **********************//*********************** END **********************/
}

全国绿色计算大赛 模拟赛第三阶段相关推荐

  1. 全国计算机技术大赛获奖名单,【大科·数院】荣光数院,满载而归——2019年全国计算机设计大赛省赛成绩斐然...

    原标题:[大科·数院]荣光数院,满载而归--2019年全国计算机设计大赛省赛成绩斐然 2019年全国计算机设计大赛辽宁省决赛由辽宁省教育厅.辽宁省财政厅主办,沈阳师范大学承办,于2019年5月17日- ...

  2. 全国大学生软件测试大赛 备赛准备——持续更新中

    目录 一.大赛介绍 1 参赛对象 1.赛项设置 3.比赛工具 4.比赛工具的配置和使用 二.比赛准备 1.账号注册 2.登录平台 3.报名 4.学习 5.练习 6.关于开发者测试过程 推荐学习链接 一 ...

  3. 第十二届蓝桥杯大赛模拟赛(第二期)

    填空题 第一题 问题描述 小明要用二进制来表示 1 到 10000 的所有整数,要求不同的整数用不同的二进制数表示,请问,为了表示 1 到 10000 的所有整数,至少需要多少个二进制位? 答案提交 ...

  4. 2018大华软件大赛模拟赛第4题 (某股票操盘手账户里有N支股票,股价互不等)

    题目:某股票操盘手账户里有N支股票,股价互不等,分别为v1,v2...vn;每支股票的持有股数为m1,m2...mn. 现在操盘手要回笼资金需要卖出股票,假设卖出价格即为当前股价,请问能回笼多少种不同 ...

  5. 小米全国高校编程大赛 正式赛题解

    高弗雷勋爵 这个题很水,但是半个小时都读错题,就很伤了,先把敌人的血量从小到大排序,用一个sum记录我当前已经扣除的血量,如果对于一个敌人,hp高于我的sum,我就看我还需要多少发子弹res,使得su ...

  6. NOI2019省选模拟赛 第三场

    传送门 明明没参加过却因为点进去结果狂掉\(rating\)-- \(A\) 集合 如果我们记 \[f_k=\sum_{i=1}^nT^i{n-i\choose k}\] 那么答案显然就是\(f_{k ...

  7. 计蒜客NOIP2017提高组模拟赛(三)day2-小区划分

    传送门 dp,注意边界 1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 #includ ...

  8. 2005年全国信息学分区联赛模拟赛 猫猫的小鱼 题解

    第一题 猫猫的小鱼 提交文件:catfish.pas/c/cpp 输入文件:catfish.in 输出文件:catfish.out 猫猫是丛林里很多动物心中的天使,她为此十分自豪.猫猫最爱吃鱼了,她每 ...

  9. 第七届全国GIS技能大赛下午赛题答案(不含开发)

    需要电子档的可添加QQ1573363477免费获取

最新文章

  1. git branch 为什么会进入编辑状态_gitamp;github(总结git与github的基本用法)
  2. 属性总结(四):linestyle
  3. BABOK - 需求管理和沟通(Requirements Management and Communication)概要
  4. 电脑屏保海底世界_水下栖息地:人类能否在海洋中居住?真的有人住在海底吗?...
  5. [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询
  6. 西安市2008驾照理论考试题
  7. 抢人竞争激烈,为保障iPhone需求,富士康为新员工提供万元奖金
  8. ebook site
  9. [MySQL] specified key was too long max key length is 767bytes
  10. springmvc web.xml和application.xml配置详情(附:完整版pom.xml)
  11. visio业务流程图教学_用visio软件怎样画数据流程图和业务流程图?
  12. SpringBoot测试类
  13. 如何自学c语言更有效率,新手自学C语言提高效率的方法(混精)
  14. wps中word转html乱码,wps转word格式乱码了怎么办
  15. html正方形项目符号,html自定义项目符号
  16. QtAndroid具体解释(6):集成信鸽推送
  17. 【CIPS 2016】(17章)文字识别 (研究进展、现状趋势)
  18. 虹科方案 | 虹科基于空口测试的新型5G毫米波测试方案
  19. 【UI自动化设计模式】超越 Page Objects:使用Serenity和ScreenplayPattern实现新一代的自动化测试
  20. 代码行统计工具:根据命令行输入的指定目录及文件类型进行统计目录或单个文件的代码行数

热门文章

  1. Hololens环境搭建
  2. 2023年江苏专转本志愿填报辅导(22上岸南工程学长辅导手册)
  3. 《基于深度学习的加密流量识别研究》-2022毕设笔记
  4. Launching unittests with arguments python -m unittest
  5. Linux命令行参数前加杠-和不加杠的区别
  6. 计算圆周率可以根据公式如下:请利用Python提供的itertools模块,我们来计算这个序列的前N项和——python
  7. iPad作为Windows电脑副屏使用技巧(详细向)
  8. 苹果手机投影到墙上_电视VS投影仪,你会选哪个?
  9. 蚁群算法C语言最短路径规划,蚁群算法规划路径
  10. 用Java语言实现文本内容对比的算法和程序