热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分享一波关于做Kaggle比赛,Jdata,天池的经验,看完我这篇就够了。

Author:JasperyangSchool:BUPT这篇文章同时在知乎里放着~写在前面Kaggle的数据挖掘比赛近年来很火,以至于中国兴起了很多很多

@Author : Jasperyang
@School : BUPT

这篇文章同时在知乎里放着~

写在前面

Kaggle的数据挖掘比赛近年来很火,以至于中国兴起了很多很多类似的比赛,做了两个这种类型的比赛了,Jdata用户商品购买预测和用户位置精准预测,积累了相当多的比赛经验了,虽然两次成绩都不是特别好,59/4590 和 179/2844 。这些比赛的套路从根本上都是一毛一样的,我下面可以和大家探讨一个大致的做题套路以及怎么往高分走的方向,但是总结来说这就是个拼体力的任务,和智力无关。(虽然锻炼了动手能力,极大强化了我在sklearn和pandas上的技能熟练度...)

PART 1 : 怎么开始

首先是看题目,是个什么样类型的预测?回归?二分类?多分类?
每种类型的预测会有一点点不同,个人觉得西瓜书还是需要快速看一遍的,不一定说每个公式都要仔仔细细去推导(推导公式对你做比赛基本没有什么帮助),你要知道什么是监督,半监督,非监督等等。

关于多分类我有个入门blog,可以快速浏览一遍

  • 关于比较简单的多分类思想的整理,没有实质性的帮助,莽看

然后就是繁复的特征工程

一般这种比赛都有个这么样的流程:

每个特征你都应该取好名字,以防乱了。

另外,由于做模型融合时需要有特征多样性这么一说,所以也许你需要不同的特征簇输入到不同的模型中,所以做好你的文件管理十分重要!!!

我建议你的比赛工程文件如下。

result里面你需也要分好文件夹放不同的结果,这样方便后面模型融合时我们用投票器的方式。

experiment里面是你的jupyter实验文件,因为这类文件你会创建很多,所以最好有一个专门的文件夹来管理。

是不是很简单并且清晰明了,当你学会了sklearn中的pipeline之后,你就可以搭建一个可以轻易修改并给别人看讨论思考过程的工程代码。但是不能完成的是做成一个可以轻易复用到各种比赛的框架。因为每个比赛的数据大不相同。不再多言。

OK!! 走过上面的流程,我们现在进入到part 2的训练阶段吧,这个阶段是最激动人心的,因为你将在这里遇见你特征工程以及模型的不足,然后调优,看着成绩慢慢提高~!

PART 2

模型阶段,在这里,你需要对各种模型都有很清晰的了解,最好是你能够推导公式,不能也算了。

  • Logistic Regression

  • SVM

  • GDBT

  • Naive Bayes

  • Xgboost (这个可以说是最有用的)

  • Adaboost 等等

熟读西瓜书吧,里面从基础开始会让你懂很多,最好是李航的统计学习方法看一遍,这本书比较薄,涵盖的内容却很全,推导也好理解。

然后这些模型很高兴的是,一个都不用你去写~都有现成的库,而且基本集中在sklearn中。除了 lightGBM。

先看一下这篇简单调用: python sklearn常用分类算法模型的调用,你会发现模型用起来好容易好方便~是的,但是这只是开始,别忘记要保存模型哦,另外保存结果也要严格按照规定的文件路径,不然后面你就乱了。

sklearn的编程方式博大精深,但是api使用还是很简单,你只需要花点时间好好学学,就能很熟练了,推荐 python之sklearn学习笔记,这个比官网的教程好看懂,毕竟是中文的嘛...流汗~

再来你还需要去对这些算法调参,这些我就不再谈了,我想着重提一下xgboost,这是一个可以并行运算的回归树,在现在的比赛中用的十分频繁而且有效。

  • XGBoost 原理解析,还不错的blog,我之前也翻译过官方的但是那个太偏理论,这个还有点工程上的见解,还不错

  • 我翻译的官网的原理解释 : (XGBoost)提升树入门介绍(Inrtoduction to Boosted Trees)

看懂了后你就会知道为什么这个东西这么牛逼了,当然前提是你需要知道决策树,随机森林的原理。

再说一句,安装xgboost在ubuntu系统上很方便,但别的系统真的很难受,自己体会吧,不想浪费时间最好都弄成ubuntu

xgboost运行后的效果一般就很好了,但是这不是最终的,因为xgboost有很多的参数,怎么去调参使得结果更优很重要。

  • XGBoost调参经验(这篇是很好很详细的)

  • 余音的xgboost调参经验

调参也是个体力活,望各位保重身体!~

好了,part 2 也就讲到这里了,其实把这前两个部分好好做,就能取得好的成绩了,第三个部分是后期往上窜一窜的手段,当然不可不用。

PART 3

模型融合

模型融合得看你是做什么样的预测,不同的预测结果有不同的融合方式。
bagging,voting,stacking都是ensembling的一种。

  • Kaggle机器学习之模型融合(stacking)心得

  • 【机器学习】模型融合方法概述

一般都是讲回归的,voting具体的方法没有讲,我这里有一段代码,你看看就懂怎么做voting。

# 投票器
def file_name(file_dir):filename = []for root, dirs, files in os.walk(file_dir):filename.append(files)return filename\n",filename = file_name('./result/all_result/')[0]'''
* 文件名 * 票数['result_0.002_no_0.03_8steps_0.8964.csv', 9
'result_TL_ten_0.002_no_0.03_0.9062.csv', 10
'result_0.001_0.8917 .csv', 9
'result_LT_ten__0.001_no_0.03_0.9092.csv', 10
'result_LT_ten_0.0015_no_0.03_0.9051.csv', 10
'result_0.0015_0.9061.csv', 10
'result_AdaB_0.31.csv', 3
'result_feature_delexcep_0.002_tree.csv', 9
'result_rf_0.001_0.03_0.86.csv', 8
'result_lr_0.60.csv', 4
'result_rf_0.87.csv', 8
'result_0.002_no_0.03_6steps_0.8951.csv', 9
'result_0.002_no_0.03_0.9058.csv', 10
'result_gdbt_0.79.csv', 6
'result_xgb_91.csv', 11
'result_0.002__0.9046.csv', 10]'''dic = {}
index = list(re.iloc[:,0])
result = []
voting = [9,10,9,10,10,10,3,9,8,4,8,9,10,6,11,10,9]
for t in list(re.iloc[:,0]):dic[t] = {}for i,shop in enumerate(list(re[re.row_id == t].iloc[0,1:])):# 建立字典if shop not in dic[t].keys():dic[t] = {re[re.row_id == t].iloc[0,1] : voting[i]}else:dic[t][shop] += voting[i]# 选出最高票者 , 得票相同的选后者top = 0score = 0for x,y in dic[t].items():if y > score:top = xscore = yresult.append(x)
re = pd.DataFrame({'row_id':index,'shop_id':result})"

关于模型融合这一块就看你想怎么弄了,多标签分类这种比较局限,就是投票器,回归的话花样就多了,还能分层搞,所以不怕你想不到,就怕你不尝试。

为了加深你对模型融合的理解和使用,另外推荐三篇:

  • 关于bagging和random forest,GDBT以及属性扰动(属性扰动我在西瓜书里看到的,但是实际中我觉得还是不敢用)

  • Bagging与随机森林(这个算是多种方法的一个小总结吧)

  • 讲sklearn中的投票器实现,很好,这篇偏讲理论,讲的很不错,可以学到一些东西

PART 4

最后我讲两个trick吧。(没什么道理性的,有时候行,有时不行)

  1. 找比赛leak,这个就是钻空子吧。通过分析测试集的一些特性找出golden feature(就是一下子能把成绩提高老多的feature)我听大牛的分享里有讲到但是我做比赛时没有想到,很惭愧。

  2. 利用GDBT或是XGBoost的叶子节点的信息创建出新的特征,一般来讲能提高成绩,但是训练起来贼慢,像我借了好几台电脑,把训练集分散到不同电脑上跑。累死了...

    • 利用GDBT的叶子节点信息构造新的特征(原理不是很清楚,Facebook发表的,这篇最后面有些链接可以点进去看,会更明白点)

总结

有人说跟一遍kaggle上的kernel一套就都会了,我觉得挺好的,但是看了我的这篇呕心沥血的文章后,我想你的知识才是系统的!~

好了,终于到收官了,说实在的,这类型的比赛我暂时是不想参加了,我们学校的大牛硬是打了10场,然后拿了两次冠军,我这参加了两次,成绩不好,但是已经身心俱疲了,没信心拿到奖了。况且,我认为深度学习才是现在的王道,我已经在图像识别和image caption中遨游了好些日子。有意思多了。

到此,祝大家好运。



推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • “你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬” ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
author-avatar
KingDragon龙帝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有