写点什么

14 岁时,我成为了最年轻的 Kaggle 竞赛大师

  • 2022-02-17
  • 本文字数:4113 字

    阅读完需:约 13 分钟

14岁时,我成为了最年轻的Kaggle竞赛大师

有些人可能会觉得“数据科学”和“机器学习”这两个术语看起来很高大上,觉得需要很专业的技能才能在这两个领域取得成就。乍一看,数据科学和机器学习的领域可能会让人不知所措,新手眼巴巴望着无穷无尽的代码和技术术语,不知道从哪里入门。


Kaggle 是许多人在这一领域探索的起点之一。对于其他人来说,Kaggle 是他们在机器学习行业参与竞赛、赢得声誉和深入研究的去处。


在本文中,我将带你了解我如何在 14 岁时成为一名最年轻的 Kaggle 竞赛大师。



作者的 Kaggle主页

自我介绍

我是 AndyWang,一名高中新生,对数学、人工智能和计算机科学有着浓厚的兴趣。我在 Kaggle 上参与竞赛以学习和提高我的技能,并获得了 2 枚银牌和 1 枚金牌。



作者照片

早期经历

几年前我对数学产生了兴趣,并开始自学比我在学校所学主题更高级的内容。不久之后我开始研究编程,因为我从小就对计算机科学着迷。我搜索线上教学内容后,找到了几门教授 Python 和基本编程概念的课程。不久之后我就开始自己编程了,还制作了一些小项目,例如用回溯算法制作一个数独求解器。



来自我的数独求解器的代码片段


彼时我有点迷惘,不知道自己手中的知识应该用在什么地方。直到有一天,当我的朋友向我介绍机器学习和数据科学领域时,我才真正意识到了编程的力量所在。然后我找到了 Kaggle 这个网站,它扩展了我对当前计算和人工智能技术的能力边界的认知。

我是如何进步和学习的

我对编程和机器学习概念的了解主要来自互联网。有疑问时,互联网是你最好的老师。中学阶段没有学校会教授数据科学或神经网络知识,如果我想在 Kaggle 上取得成就,只能靠自己了。


数据科学和机器学习对许多人来说是一项艰巨的任务。面对浩如烟海的资源和主题,人们不知道从哪里开始或如何学习。因为与术语“数据科学”和“机器学习”相关的领域太多,精通每个类别几乎是不可能的。ML 和 DS 的力量太惊人了。对于像我这样的初学者来说,你首先需要找到自己感兴趣的东西,并充分挖掘它所能实现的潜力。



机器学习的不同领域


根据初学者已经掌握的知识水平,学习 ML 和 DS 对许多人来说会有不同的路径,以下则是我取得成功的路径。


  1. 我知道数学是未来一切的基础。线性代数和微积分是机器学习中使用的两个最重要的数学概念。几乎所有的机器学习算法都在某种程度上与这两个领域相关。数据以向量和矩阵的形式表示和处理。因此,我们需要了解矩阵的基本运算原理。机器学习中微积分最常见的用途之一是梯度下降。这是一种算法,旨在使用函数的梯度迭代地对全局最小值采取多个步骤来最小化目标函数。

  2. 统计学也是要掌握的。顾名思义,数据科学研究的都是数据。尽管计算机可以预测数据中的某些趋势,但只有人类才能对其进行分析、计算某些属性并最终得出关于数据的结论。数据的预处理和特征工程在很大程度上依赖于统计学。我零零碎碎地学习了一些统计学知识,在互联网上浏览了很多文章,并找到了一些不错的在线课程。

  3. 在了解了基础知识后,我开始着手编写代码。凭借面向对象编程(OOP)和 Python 的基本知识,我找到了一些在线课程,这些课程教会了我如何使用机器学习中常用的那些库。我并不会简单地遵循课程所提供的代码,复制粘贴了事,而是确保自己理解课程所写内容背后的数学原理。如果你不了解事物的内部运作方式,就不可能充分利用这些东西来为你带来优势。我从简单的算法(如线性回归)开始,一点点提升到更复杂的算法(如梯度提升和神经网络)。


学习要脚踏实地,步步为营,每天学到的知识可以轻松积累成非常复杂的东西。

加入 Kaggle

这时,我想通过 Kaggle 竞赛来构建自己的知识体系。我参加了使用回归技术预测房价的初学者竞赛,才发现我学到的东西还远远不够。我最缺的是经验。通过失败和尝试新事物来学习是最佳途径。我熟悉了 Kaggle 的环境,浏览了很多相关讨论和笔记本来研究围绕目标问题的各种解释。不久之后,我觉得自己已经为第一次真正的比赛做好了准备。我和我的朋友Andre Ye一起参加了 Mechanism of Action竞赛



我们的第一场竞赛,MoA


当时我们都是比赛的新手。论坛里那些看起来很专业的代码和技术讨论让我们目瞪口呆。我决定从头开始,而不是 fork 一个入门笔记本。在讨论帖的帮助下,我得以在很短的时间内就做好了基础工作。创新是赢得竞赛的关键要素。我翻阅了关于这一问题的许多论文和文章,然后将它们与论坛上提供的方法相结合,让我们的解决方案进入了排行榜的前 4%。


后来,有了更多的经验后,我们又参加了两场比赛,获得了银牌和第一枚金牌。这样的结果对我来说真的是一个惊喜,我非常感谢 Kaggle 社区指导我实现这一成就。以下是我在参加比赛时观察和学习到的一些技巧和窍门。

我的 Kaggle 竞赛通用管道

在我参加的比赛中我遵循了一个通用的管道,它不仅可以用来安排工作,还可以高效率地产生有意义的结果。


  1. 仔细阅读数据描述和概述。如果可能,再稍稍探索一些领域知识。

  2. 在阅读任何论文、讨论或笔记本之前,尝试自己创建一个基线。这样就不会被其他人的言论禁锢自己的大脑,有助于产生一些全新的想法。

  3. 建立一个可行的交叉验证策略并提交到排行榜。确保你的 CV 策略也适用于 LB,这一点很重要。

  4. 阅读,阅读和学习!充分探索与主题相关的论文,在论坛和笔记本中寻找灵感。

  5. 开始在模型方面或特性方面调整你的基线。一次只调整一件事,这样你就能知道是什么导致模型获得改进/表现更差。

  6. 尽可能多地探索新方法,不要在行不通的事情上纠缠太久。

  7. 集成!如果其他办法都不奏效,我发现集成或堆叠是最稳定的改进方式。

  8. 只选择有良好 CV 分数的提交(并且要清楚它为什么表现出色)。

我学到和运用的东西

随着我参加的比赛越来越多,一些解决方案的复杂性让我大受震撼,这些方案从特征工程到神经网络结构都有涉及。



来自 RANZCR 竞赛的头名,令人惊叹的方案


一般来说,机器学习算法只能从包含信息的数据中学习,并且可以学得很好。在某些情况下,使用与预期略有不同的算法可能会有所帮助。例如,使用主成分分析(PCA)来减少数据的维度,然后将减少的特征连接回原始特征,这种方法帮助我解决了不止一种问题。


有了特征工程就有了特征选择。删除不重要的特征有助于减少数据中的噪声。在 Mechanism of Action 比赛中,论坛和讨论帖中的方法对我们设计的模型并没有什么帮助。在这种情况下,你应该大胆地去阅读和深入研究各种论文。由于我处理的案例(多标签分类)并不常见,因此我找不到什么简单的教程。我找到了一篇论文,旨在对比使用问题转换方法的多标签特征选择。


阅读和研究论文看起来是很困难的事情,但浏览它们并从长篇技术术语中掌握关键词是一项至关重要的技能。对于像我这样的初学者来说,试图理解你遇到的每一篇论文的每一个细节是不可能做到的。只有当我找到自己需要和将要使用的论文时,我才会尝试理解论文中的每一个单词和引用。


在建模过程中,我学到的最大的一课就是创造力。不仅要在模型结构中保持创造性,而且要跳出框框,思考模型如何从根本上处理不同类型的数据。


  • 将模型调整为具有非线性拓扑结构,或为表格数据构建类似 ResNet 的结构化网络,不仅在 MoA 竞赛中获得了一些惊人的成果,而且在接下来的 Jane Street Market Prediction 比赛中也获得了一些出色的结果,我们在这一比赛中的 4.2k 团队中排名第 16。

  • 探索不同类型的自动编码器,例如去噪、变分和稀疏编码器,可以为你的数据带来令人惊讶的变化,这不是简单的特征工程和选择可以实现的。

  • 集成。组合不同模型的结果可以为你的解决方案增加多样性,从而使其更加稳健和稳定。无论最后起作用或者不起作用的是哪些建模技巧,集成始终是我在比赛中的“最后手段”。

  • 始终关注新出现的论文,并探索论坛中提到的内容以外的知识。调整激活函数(尝试swish代替 ReLU)和优化器(尝试AdaBelief代替 Adam 等)之类的小东西可能会从模型中挤出一些性能。

  • 跳出框框思考!使用一维 CNN 对表格数据进行特征提取。或者使用DeepInsight,利用 CNN 的优势将表格数据转换为图像。



图片来自Kaggle


最后,在一场比赛中奏效的策略不一定能在另一场比赛中改善你的解决方案。在 Jane Street Market Prediction 挑战赛期间,我发现特征工程对结果根本没有帮助。相反,我发现了建模中隐藏的魔力。这里要记住的一般经验法则是:


在这样的情况下,不要纠结于“以前有效”或“对他人有效”的事情,你应该继续前进并花更多时间探索可以带来改进的新事物。参加 Kaggle 比赛并获得奖牌并非易事,但使用正确的学习方法和工具可以让这个过程变得容易许多。


  • 查看各种讨论帖和阅读公共笔记本是非常有帮助的。社区每天都会有新的想法出现,我通过论坛中提到的论文和笔记本中所使用的库了解了一些最新的、迷人的模型和工具。其中之一是TabNet,这是一种使用顺序注意力将特征选择合并到模型中来对表格数据进行建模的新方法。这个模型让我在 MoA 比赛中获得银牌。

  • 最后,一个稳定而强大的管道是在私有排行榜中获得出色表现的关键因素。浪费时间过度拟合以在公共排行榜中获得额外的.0001 分是没有意义的。要一直相信你的本地交叉验证分数,因为训练数据量大于公共排行榜的数据量。


除了所有提示和技巧外,我成功的最重要因素是我一致的建模管道和稳定的 CV。

要做一个强大、健壮的 CV......

设置本地交叉验证方案时。以下是应该记住的几个要点:


  1. 折叠数>3。折叠数太小的话,训练分割不足以代表整个数据。

  2. 确保数据没有泄漏。特别是在时间序列预测等情况下,正常的交叉验证会引入未来数据的泄漏,应使用某种形式的时间序列拆分。

  3. 当目标不平衡时使用分层折叠。分层 KFold 方法试图在折叠中平均分割目标。

  4. 确保自己知道为什么事情会有所改善。这是非常重要的,因为结果可能会受到随机种子和其他未知因素的影响。这可能导致看不见的数据(私有排行榜)存在重大不确定性。简单地复制粘贴代码是没法帮助你学习或赢得比赛的。我在 Kaggle 中最重要的座右铭是永远不要复制别人的工作,我可以从他们的想法中得到启发,甚至使用他们的建模方法,但我从不提交其他人的工作作为我的解决方案。在接触新事物时,我养成了对于所有我不理解的东西查找资料的习惯,直到我可以自信地向其他人解释这个主题为止。

写在最后……

本文可能无法帮助你赢得比赛,但我向你保证,它们可以帮助你在 ML 和 DS 的旅程中减少失败的痛苦。


原文链接:https://towardsdatascience.com/my-journey-to-kaggle-master-at-the-age-of-14-e2c42b19c6f7

2022-02-17 15:103788

评论 2 条评论

发布
用户头像
14岁!
2022-02-22 10:41
回复
用户头像
respect!想知道家父在哪高就?
2022-02-17 20:22
回复
没有更多了
发现更多内容

7年Java经验|面20+家公司|已拿16个offer|面经总结|

Java架构追梦

Java 架构 面试 20+大厂面经

非科班毕业生,五面阿里:四轮技术面+HR一面已拿offer

码农之家

Java 编程 程序员 互联网 面试

Android面试送分题:大厂经典高频面试题体系化集合,实战篇

欢喜学安卓

android 程序员 面试 移动开发

想来百万流量技术公众号发布文章吗? InfoQ 开放内容平台了!

xiaotan

InfoQ 的朋友们 热门活动

理论 + 标准 + 工程 —— 阿里云视频云编码优化的思考与发现

阿里云CloudImagine

阿里云 视频编码 视频算法 视频处理

工业互联网的脖子被卡死了?

工业互联网

小厂逆袭美团|5年经验|一二三面经,已拿offer|

Java架构追梦

Java 架构 面试 美团Offer

2021金三银四:狂刷398道Java最新MySQL笔记;成功收获9个Offer

比伯

Java MySQL 编程 架构 计算机

HDFS的垃圾桶机制

五分钟学大数据

hadoop 4月日更

入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)

Java架构追梦

Java 架构 字节跳动 面试

架构实战营 - 模块 2- 作业

carl

架构实战营

想来百万流量技术公众号发布文章吗? InfoQ 开放内容平台了!

InfoQ写作社区官方

热门活动

特权访问管理(PAM)即服务

龙归科技

代码回现 | 如何实现交易反欺诈?

VoltDB

数据分析 金融科技 VoltDB

Flume高阶自定义组件

大数据技术指南

大数据 flume 4月日更

JVM-技术专题-方法区中常量池分析

码界西柚

JVM 常量池

android热修复基本原理,15分钟的字节跳动视频面试,满满干货指导

欢喜学安卓

android 程序员 面试 移动开发

APM-技术专题-监控系统选型

码界西柚

APM 监控

spring中让你眼前一亮的代码技巧

AI乔治

Java spring 架构 微服务

从中国企业进入IEC最高决策机构,看科技领先的产业价值与用户价值

脑极体

一个CURD三年的Java程序员刷完这份《阿里面试指南(恒山版)》,居然斩获了十七个offer

Java架构之路

Java 程序员 架构 面试 编程语言

硬核!阿里内部这份《Java面试核心知识手册》在Github上已获赞高达89.7K!

Java架构之路

Java 程序员 架构 面试 编程语言

阿里巴巴云原生 etcd 服务集群管控优化实践

阿里巴巴云原生

容器 运维 云原生 k8s 存储

HikariCP-技术专题-配置介绍和使用

码界西柚

聪明人的训练(十四)

Changing Lin

4月日更

一篇文章了解CI/CD管道全流程

禅道项目管理

DevOps 持续集成 持续交付

入门物联网嵌入式才是关键!

cdhqyj

技术 编程语言 物联网 嵌入式 系统

博云入选2021爱分析·产业数字化厂商全景报告

BoCloud博云

云计算 云原生 PaaS 博云

iOS--面试题:多线程

ios 面试 多线程

卧槽,误删数据库了,会被开除吗?

AI乔治

Java 数据库 sql 架构 SQL语法

GitHub持续霸榜!2021年Java核心知识:面试突击版

Java架构之路

Java 程序员 架构 面试 编程语言

14岁时,我成为了最年轻的Kaggle竞赛大师_AI&大模型_Andy Wang_InfoQ精选文章