智慧航空AI大赛-阿里云算法大赛总结(源码分享)

 向AI转型的程序员都关注了这个号???


大数据挖掘DT数据分析  公众号: datadw


总结一下新的教训

1.由于都是NP难题,获得最优解用常规的方法非常困难,对于不是算法科班出身的人来说,首先应该到网络上寻找一下论文,是否有一些好的经验。
2.保持平常心,这种比赛获奖很困难,生活还是要和往常一样,只是将空余的时间给做比赛
3.每一个小功能,小函数,尽可能做一些简单的单元测试,这种题目往往代码最后非常复杂,难以调试,不做单元测试,可能以后调试都很困难
4.熟悉使用语言的多线程工作方式,例如C#的多线程特点
5.寻找好的计算资源,尽量在多核CPU上运行
6.加入官方群,问题及时和官方讨论
7.利用晚上进行大规模的迭代测试和参数实验
8.中间结果保存,减少每次执行时间。
大家都是为了奖金去的(TOP10都有奖金),TOP17的名次,和自己实力符合。

另外这次全程使用VS CODE 和 NET CORE 2.0 写的代码,在公司的PC和家里的MAC上通过GIT无缝衔接,体验不错。


代码:

本文代码在公众号 datadw 里 回复 航空  即可获取。


赛题:https://tianchi.aliyun.com/competition/information.htm?raceId=231609


一个人做题目很有趣,但是组队也不错,有人愿意和我组队参加第二赛季吗?难度增加不少的。前三有奖金,当然如果没有奇迹,基本上拿不到奖金的。

附上以前比赛经验:
穷举部分应该最后加入
一般来说,算法题目总归缺少不了排列组合的尝试,但是如果过早的在算法中引入了排列组合的大规模计算,则每次代码运行时间会很长,非常浪费时间。这里可以有两个方案,第一,可以做一个系统配置项,是否启用排列组合的尝试;第二,可以将排列组合的强度也做成一个配置项。

所谓的排列组合的强度,就是算法的广度和深度的限制。例如背包问题,如果全部有10个元素,我进行全排列尝试,20个元素,则进行简单的贪婪算法。这里的10就可以认为是一个阈值,超过阈值的时候,考虑到时间成本,使用一般的算法。

保证每次运行结果都是符合题目要求的
在复杂的场景下,你的算法可能是非常优秀的,但是可能在一个很微小的点上,是不符合题目要求的。题目要求是最大的前提,如果违反题目要求,再好的算法都是不能被采纳的。所以务必检查每次的运行结果是否符合题目要求。

保证编码正确
有时候,一个想法是正确的,但是往往可能出现编码的错误,使得结果变坏。所以,必须保证你的代码和你的想法是一致的。如果出现你的想法使得你的运行结果变差的时候,不要先急着推翻你的想法,而是应该先看一下是不是你的代码有什么错误,没有真正反映出你的实际想法。

逻辑和阈值
在复杂的算法题目中,有时候我们喜欢用阈值来运行出不同结果,然后选择最优的结果。但是,如果可能的话,应该以统计等方式决定阈值。如果可能的话,应该有一个明确的逻辑,而不使用阈值。阈值没有泛用性,并且有时候由于不能测试每一个阈值的效果,容易出现局部最优解,而不是全局最优解

版本管理
不是每一个想法都会给结果带来正面的效果,有些改动可能不但没有效果,而且使得结果变坏,我们需要一个版本管理的概念,将不好的结果及时回滚到原来的状态。有时候,两个想法可能被同事加入到代码中,并且两个想法独立使用和一起使用效果也不同,这个时候更加需要版本管理工具了。建议使用Git做版本管理工具,可以自由的添加或者删减不同的想法。

自动测试 和 电源管理
这次没有准备自动测试的代码,正确的做法是,白天进行编码工作,晚上对于阈值,各种想法的排列组合的效果,进行自动测试。
在自动测试的时候,请注意电源管理的设定,需要看一下是否设定了休眠,如果设定了休眠状态,基本上什么都运行不了了。
对于每次自动测试的结果,都必须保留下来,作为算法的评价依据。

中间指标 和 数据分析
在最终目标之外,还需要订立一些其他指标来判断算法的好坏。
整个最终结果往往是由多种因素决定的,如果将这些因素的量化结果也打印出来,对于这些指标进行分析,往往可以找到优化点。

本文来自 微信公众号 datadw  【大数据挖掘DT数据分析】

有一些题目,在写算法之前,可以将题目中给定的数据集进行一些分析,总结出数据集的特征,然后针对这些特征选择算法,也是一个很重要的步骤。

从答案中找问题
很多算法的最终结果可能是一些调度计划和分配方案。仔细观察这些结果,找到一些明显可以优化的点,这也是提高算法结果的途径。
从算法执行结果这个答案中寻找你的算法中存在的问题,是一条很有用的途径。

http://www.cnblogs.com/TextEditor/p/7267307.html#3788737



人工智能大数据与深度学习

搜索添加微信公众号:weic2c

长按图片,识别二维码,点关注



大数据挖掘DT数据分析

搜索添加微信公众号:datadw


教你机器学习,教你数据挖掘

长按图片,识别二维码,点关注



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AliDMCompetition 阿里巴巴大数据竞赛(http://102.alibaba.com/competition/addDiscovery/index.htm ) 数据说明 提供的原始文件有大约4M左右,涉及1千多天猫用户,几千个天猫品牌,总共10万多条的行为记录。 用户4种行为类型(Type)对应代码分别为: 点击:0 购买:1 收藏:2 购物车:3 提交格式 参赛者将预测的用户存入文本文件中,格式如下: user_id \t brand_id , brand_id , brand_id \n 上传的结果文件名字不限(20字以内),文件必须为txt格式。 预测结果 真实购买记录一共有3526条 TODO 注意调整正负样本比例 在LR的基础上做RawLR。按照天猫内部的思路来。 在LR的基础上做MRLR,样本提取要更加合理。 在UserCF和ItemCF上加上时间因子的影响。 利用UserCF做好的用户聚类、ItemCF做好的品牌聚类来做细化的LR,或者在聚类 上做LFM 在ItemCF的思路上挖掘频繁项集/购买模式,如购买品牌A和商品后往往会购买 品牌B的商品 LFM 数据集特征 某一商品在购买前的一段时间内会出现大量点击次数,购买完成后的一段时间内也会出现大量点击次数 用户在本月有过行为的商品极少出现在下个月的购买列表里 根据观察推断:用户浏览商品的行为可分为两类: 无目的浏览,可能会在浏览过程中对某些中意的商品进行购买,数据表现为有大量点击次数<=2的行为记录,但很少有购买行为 有目的的查找商品,可能是事先有需求的情况,数据表现为一段时间内点击商品数很少, 但点击过的商品大多数都进行了购买 参考论文 See https://www.google.com.hk/search?q=data+mining+time+series&ie=utf-8&oe=utf-8&aq=t for more. Chapter 1 MINING TIME SERIES DATA - ResearchGate 模型列表 LR(model=LinearSVC(C=10, loss='l1'), alpha=0.7, degree=1) | TOTAL VISITED BOUGHT FAVO CART NEW | Pred # 1438 1436 626 71 12 | % 100% 99.861% 43.533% 4.937% 0.834% | Real # 1311 250 89 10 1 | % 100% 19.069% 6.789% 0.763% 0.076% Hit # 76 Precision 5.285118% Recall 5.797101% F1 Score 5.529283% LR(model=LogisticRegression(penalty='l1'), alpha=0.7, degree=1) | TOTAL VISITED BOUGHT FAVO CART NEW | Pred # 1472 1470 615 68 14 | % 100% 99.864% 41.780% 4.620% 0.951% | Real # 1311 250 89 10 1 | % 100% 19.069% 6.789% 0.763% 0.076% Hit # 74 Precision 5.027174% Recall 5.644546% F1 Score 5.318002% 这个模型在数据变成2次后,Precision ~ 16%,同时F1 ~ 3% LR(model=Perceptron(penalty='l1'), alpha=0.7, degree=1) | TOTAL VISITED BOUGHT FAVO CART NEW | Pred # 3145 3140 1023 130 26 | % 100% 99.841% 32.528% 4.134% 0.827% | Real # 1311 250 89 10 1 | % 100% 19.069% 6.789% 0.763% 0.076% Hit # 113 Precis

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值