首页 > 编程知识 正文

kaggle,kaggle注册没有验证码

时间:2023-05-03 13:58:47 阅读:157965 作者:4738

@Author : Jasperyang

@School : BUPT

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

刚才写的Kaggle数据挖掘比赛近年来很受欢迎,在中国兴起了很多类似的比赛。 我做了两个这种类型的比赛。 Jdata用户的商品购买预测和用户位置的准确预测积累了相当多的比赛经验。 两次成绩都不是特别好,分别是59/4590和179/2844。 这些比赛套路从根本上就像长毛了一样,我以后可以和大家讨论一下大概的题型和如何升入高分,但总的来说这是一项耗费体力的任务,与智力无关。 (锻炼了动手能力,大幅加强了我在sklearn和pandas的技能熟练度,但是……

PART 1 :怎么开始,首先看主题,是什么类型的预测? 要复出吗? 第二类? 多分类?

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

关于多分类有入门blog,可以马上浏览

对于比较简单的多分类思想的梳理,没有实质性的帮助,鲁莽地看

然后是复杂的特征工程

一般来说,这场比赛有这样的流程。

最重要的是特征工程。 基本上要在这里花60%的时间。 因为这里需要的是数据清洗、异常处理、转换、新特征的构建等。 这套有详细的教程。 事先贴好两个传送门。 (

在sklearn优雅地做特色工程

(和上面一篇是同一个作者,我觉得很好) ) sklearn在做单机的特征工程

看这两个,基本上就能很好地处理数据了。

但是,其实在做特征工程之前,应该去了解数据怎么知道数据呢? 这需要你熟悉pandas这个工具。 当提到如何熟悉此工具时,您的邀请希望学习您的以下学习过程。

安装anaconda。 这个很简单,在网上搜索一下就有了。 (这个科研工具基本上包括了所有需要的东西。 jupyter、pandas、numpy等。 当然,要进行深度学习的话,tensorflow、pytorch等需要另外安装。

之后需要用XG boost这个神器作为模型,所以你的系统最好是ubuntu。 只有pip install可以在ubuntu上安装XG boost,所以安装在其他系统上可能会想打人。

确定,如果有环境,就使用anaconda/wjdfd/jupyter运行jupyter工作环境吧。 在这个环境中,你可以随心所欲地做你喜欢的事情.(主要是jupyter可以保存你以前运行的结果,容易实验,详细情况可以谷歌) )。

学习pandas很简单。 与数据库对表的操作相同。 初学者可以直接浏览官网教程:10 min to learn,然后多调查一些merge、concat、join等复杂的操作,咬一点。 如果慢慢变好的话,就可以对数据进行必要的转换,比如找到大于某年某个数值的数据。

为什么需要知道数据呢? 由于数据有分布,业务含义不同,通过组织制图可以更好地理解特定属性的含义,构建和提取有用的特征。

构造特征

我认为这是特色项目的一部分,也是最重要的部分。 你会在这里花很多时间的吧! (特征是feature,即从你的训练数据集中排除除label以外的所有列。)

例如,如果是商品预测比赛,可以将特征分为三类,从三个角度进行整理和分析。 (感谢阿里移动推荐算法大赛汇总的图片数据)

这种特征结构提取的过程每场比赛都不一样,在此不再赘述,如果需要更多启发性的思考,我们建议大量搜索别人是如何从各个角度进行思考的。

在这里要提到,一般来说,与时间相关的东西都需要设计成时间窗之类的东西。 都说这很复杂,不复杂,但实践起来很费力气。 简单来说,需要在一定的时间分割数据。 例如,我上一场比赛用前五天的数据预测了第二天的,但总数据集是两个月。 此时,需要将你的数据集分为训练集和验证集。

上面的1、2、3是三个训练集,后面的小框是验证集,需要训练一些模型。

同时考虑一下。 更早的数据一定会对现在的预测产生更小的影响,所以有权重的问题。 也就是说,你得到10个模型,计算最接近预测日期的为model_0,最远的为model_9,给model_0权重0.7,给model_9权重0.05。

我们需要知道什么是训练集、验证集、测试集!

有时候训练集的类别很不均衡

这个时候需要欠采样或者过采样。

在某个数据不足的类别中,随机减少训练数据

过采样查找数据较少的类别,然后使用smote方法插值并添加数据smote算法

其实数据不均衡的处理也是特征工程的一部分,我只是在这里提出

来强调了一下,类别不平衡的处理其实还有很多,但是都不常用,大家可以去大概了解了解。

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

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

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

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

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

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

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

PART 2

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

Logistic Regression

SVM

GDBT

Naive Bayes

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

Adaboost 等等

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

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

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

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

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

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

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

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

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

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

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

wxdgz的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 filenamen",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 = 0 score = 0 for x,y in dic[t].items(): if y > score: top = x score = y result.append(x)re = pd.DataFrame({'row_id':index,'shop_id':result})"

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

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

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

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

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

PART 4

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

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

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

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

总结

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

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

到此,祝大家好运。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。