专栏首页人工智能头条Otto产品分类挑战赛亚军:不要低估最近邻算法

Otto产品分类挑战赛亚军:不要低估最近邻算法

【编者按】竞赛刷分从来不是机器学习的目的,但参加竞赛可以让从业者学会快速入门。Kaggle的这篇博文,通过对奥托集团产品分类挑战赛亚军Alexander Guschin的访谈,介绍了一种有效的核心技术方法,并解释了为什么不应该低估最近邻算法的威力。Alexander的解决方案中最主要的思想是进行堆叠,将不同方法得到的预测值Y进行结合作为“元特征”。他发现KNN能够实现非常好的元特征,尝试更多的元特征可能比改善模型更有效。他使用的工具只有sklearn、xgboost和lasagne。


奥托集团产品分类挑战赛(Otto Group Product Classification Challenge)曾经是Kaggle历史上最受欢迎的竞赛。Alexander Guschin从其他3845名数据科学家行列中脱颖而出,获得了该挑战赛的亚军。在本篇博文中,Alexander将分享他的核心技术方法,并且解释为什么不应该低估最近邻算法的威力。

3848位参赛选手共3514支队伍竞相对Otto集团产品线上的物品进行分类

基本信息

1. 在参加本次挑战赛之前你是什么背景?

对机器学习我有一定的理论了解,这主要多亏了我所在的基地研究所(莫斯科物理技术学院)以及我们的教授Konstantin Vorontsov,他是俄国顶尖的机器学习专家之一。至于我对一些实际问题的熟稔,另一位很了不起的俄国数据科学家Alexander D’yakonov(曾经是Kaggle第一名),过去常常在每一年的秋季都会有实用机器学习课程,这个课程给了我很好的基础,Kagglers可能会知道这门课叫PZAD。

2. 你是怎样开始你的Kaggle竞赛之旅的?

我是从2014年秋季在Forest Cover Type Prediction开始参加比赛的,当时我对解决机器学习方面的问题并没有什么经验,后来我在“Titanic: Machine Learning from Disaster”上发现了很好的基准,它给予了我很大的帮助。从那以后,我意识到自己对机器学习非常感兴趣,并且我会尽我所能去参加每一场比赛。

3. 是什么因素使得你决定参加这次比赛?

当时我是想验证我学士毕业论文里的一些想法,并且我知道Otto的竞赛有非常靠谱的数据集。你可以通过交叉验证的方式去检查每一件事,并且简历上的变化是足够接近排行榜的,此外,比赛的精神是非常适合于检查思路的。

开启技术之旅

1. 你对数据做了什么样的预处理,使用了什么样的有监督学习方法?

我的解决方案中的堆叠架构

我的解决方案中最主要的思想是进行堆叠(stacking)。堆叠能够帮助你将不同方法得到的预测值Y(在多类问题中称之为标签)进行结合作为“元特征”。一般而言,为了获得用于训练的元特征,你需要将你的数据划分成K折,对于每(k-1)组,在(k-1)部分上训练K个模型,并用剩下的部分进行预测。为了获得测试所用的元特征,你可以用这些K个模型所做的预测进行平均,或者在基于所有训练数据的基础上做单一的预测。然后,你可以在特征和元特征上训练元分类器,并且如果你有一些元分类器的话就可以做预测平均。

在参加这个比赛的初始阶段,我发觉把数据换划分成两组是比较有用的:(1)训练集和测试集,(2)有词频-逆文档词频的训练集和有词频-逆文档词频的测试集。我的解决方案中的很多部分都采用并行的方式使用了这两组数据划分。

就有监督方法而言,我发觉Xgboost和神经网络都能够在数据上给出很好的结果,所以我决定在我的ensemble使用它们作为元分类器。

虽说KNN通常会给出不同于决策树或神经网络的预测结果,但是我还是将这些预测结果包含到了第一层中作为元特征,碰巧地是,随机森林和xgboost作为元特征也很有用。

2. 在观察数据时你最重要的发现是什么?

最主要的发现可能是KNN能够实现非常好的元特征,绝不要低估最近邻算法。

在第二层将NN和XGB预测的结果结合起来是非常重要的,在我最后一次在第二层将NN和XGB分开后在私有的LB上得到的分数大概在0.391,而将它们结合在一起后得到的分数是0.386,可以看到结果获得了很大的提升,所以在第二层进行打包会非常的有用。

在2维平面上TSNE

此外,TSNE在2维平面上看起来非常的有趣,从图中我们可以看到一些样本经过我们的算法后被误分了,这意味着要找到一种对我们预测的结果进行后处理的方法来提高logloss是非常不容易的。

同样也让人感兴趣的是,对于一些邻近其他类的类别,比如类别1和类别2,将这些类别进行专门地区别是非常值得尝试的。

holdout最终预测模型

3. 对于其中的某一发现你有没有很吃惊?

不幸地是,如果你想让你的元特征更好,你不一定非得去改善你的模型, 并且当提及到ensembling的时候,所有你能够指望的是你对算法的理解(基本上是你的元特征越丰富多样,分类精度就越好),并尽可能去尝试更多的元特征。

元特征越丰富多样,分类精度就越好。通过Extratrees得到的元特征vs通过神经网络得到的元特征

4. 你使用了哪些工具?

我仅仅使用sklearn、xgboost和lasagne。这些都是很好的机器学习库,并且我会向刚开始参加Kaggle比赛的人推荐这些工具。根据的经验,这些工具足够你去尝试不同的方法,并且在很多Kaggle比赛中都取得了很好的结果。

智慧之言

对于那些刚开始进入数据科学的人你有什么建议?

我认为最有用的建议是不要将自己困在试着细调参数或是对于每一项竞赛都使用相同的方法的笼子里。你应该通过论坛不断的进行阅读,并理解过去那些竞赛中的解决方法,所有这些将会让你获得极大的提高,不论你是什么样的级别水平。换句话说,阅读过去的那些解决方法和解决竞赛中的问题一样的重要

同样,当你第一次开始解决机器学习方面的问题时,你可能会犯一些低级的错误,这些错误会耗掉你很多的时间和精力,所以如果你能和其他人组队的话是非常有帮助的,你可以请他帮你检查你写的代码或者让他尝试相同的方法。此外,在论坛里要一直将你自己方法的性能和别人的进行对比。当你发现你的算法比论坛里别人报告的要差很多时,去检查基准和其他近段时间的一些比赛,并试着将改错误指出来。

本文分享自微信公众号 - 人工智能头条(AI_Thinker)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-06-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何用机器学习和知识图谱来实现商业智能化? | CCAI 演讲实录

    用户1737318
  • IBM副总裁、大中华区硬件系统部总经理郭仁声:未来的认知工作负载需要全新的IT基础架构

    用户1737318
  • 知识图谱中的推理技术及其在高考机器人中的应用

    用户1737318
  • 统计回归拟合方程参数

    一直以来过冷水都有给大家分享图像拟合的知识、从泰勒级数说傅里叶级数、Matlab多项式拟合初探,本期过冷水给大家讲讲统计回归做拟合。

    matlab爱好者
  • Django实战-信息资讯-用户认证

    Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(...

    小团子
  • 基于TensorFlow的机器学习速成课程25讲视频全集(16-18讲)

    WZEARW
  • 优化NVIDIA GPU性能,实现高效的模型推理

    GPU已被证明是加速深度学习和AI工作负载(如计算机视觉和自然语言处理(NLP))的有效解决方案。如今许多基于深度学习的应用程序在其生产环境中使用GPU设备,例...

    代码医生工作室
  • C#神奇的扩展方法

    以前总听说扩展方法扩展方法,只是听说是C#3.0后出来的新玩意,也仅仅是知道Linq中用到好多的扩展方法,但是他究竟是个什么东东,怎么用它,用它的好处是什么...

    hbbliyong
  • 巧用MOOC组合掌握机器学习

    咱们不提CES 2017上激动人心的自动驾驶产品(估计七八年之后你的驾驶证就可以扔掉了),也不细讲《最强大脑》节目里人类精英在图像识别环节被碾压(这曾经是人类可...

    王树义
  • 参数验证 @Validated 和 @Valid 的区别,Java Web 开发必备。

    Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR-303 的一个变种...

    Java技术栈

扫码关注云+社区

领取腾讯云代金券