Kaggle竞赛初级学习指南 | 逐步方法

发表时间:2024-04-18 13:48


当我开始学习机器学习时,我首先使用了像MNIST这样的数据集,它允许我使用最先进的算法来重现结果。有时,这使我感到过于美好,因为输入非常干净,数据非常平衡,并且在训练集和测试集之间的分布保持一致。然而,在现实中,我们很少会遇到如此完美的数据;更不用说直接从参考论文中提取算法了。


而另一方面,Kaggle为所有数据科学家提供了从理想到现实的良好过渡。那里发布的问题通常都有明确定义,但更多或少有难度,通常没有最先进的解决方案。在竞赛过程中,参与者可以通过讨论和Notebook分享从他人那里学到东西。


Kaggle适用于以下人群:

  • 刚开始探索数据科学领域,但渴望学习。

  • 在数据挖掘和机器学习方面有一定经验,并希望提高技能。

  • 想要赢得奖金并将成就添加到他们的简历上。




图片

01

KAGGLE竞赛


为了简化问题,让我们首先了解一些概念:

  • 特征:也称为独立变量。它们可以从样本数据中观察或构建,通常是模型的输入。

  • 标签:也称为目标变量。它们通常是模型的输出。

  • 训练数据:由赞助商提供的数据集,具有已知标签。

  • 测试数据:也由赞助商提供的数据集,带有未知标签。用于评估最终性能。

  • 训练集:从训练数据中提取的子集。参与者可以使用它来进行模型校准。

  • 验证集:从训练数据中提取的子集。参与者可以使用它来进行模型验证。



图片


图片

02

逐步方法


1. 评估问题

首先,我们需要将现有问题转化为一个机器学习问题。在Kaggle竞赛中,最常见的问题类型有:

  • 回归问题:预测连续数量。

  • 分类问题:预测离散标签(二元分类和多标签分类)


2. 数据探索

深入数据并找出我们正在寻找的信息非常重要。在探索过程中,我们需要考虑以下问题:

  • 如何清理数据的适当方式是什么?

  • 可以提取哪种类型的特征?

  • 哪些特征可能对标签预测有用?


2.1 统计摘要

对于数值变量,我们可以使用pandas轻松评估统计信息(最小/最大/中位数/均值/标准差)。

从上面的输出中,我们可以检查在分类问题中标签是否平衡(或者回归问题中标签的分布如何)。我们还可以检查不同数值变量之间的相关性矩阵。


2.2 可视化

大多数情况下,我们可以使用图形直观地了解统计信息。


图片


3. 数据预处理

Kaggle提供的大多数数据都存在很多噪音,有时也会缺失信息。因此,Kaggle参与者花时间清理数据非常重要。

对于数值变量,我们需要处理缺失值和异常值。

对于分类变量,我们可以使用独热编码进行转换。

对于文本数据,我们需要处理各种情况,如拼写错误、数学公式、日期/时间类型以及标点符号。


4. 特征工程

众所周知,数据和提取的特征决定了机器学习的上限。为了获得令人满意的结果,我们需要从原始数据中探索数据并提取有意义的特征。


4.1 特征提取

我们需要提取尽可能多的特征。这可能是整个竞赛中最耗时的部分。只要您认为某个特征对解决问题有用,都应该提取并通过模型进行测试。这是获胜的关键,绝对值得时间投资。


那么,我们如何提取特征呢?在Kaggle上,您可以找到许多其他Kaggle成员分享的笔记本,这非常方便。有几种方法可以帮助您入门:

对于数值变量,我们可以尝试使用线性组合来发现新特征。

对于文本数据,有一些典型的特征,如文本长度、嵌入、TF-IDF、LDA甚至来自深度学习框架的潜在变量。

通过错误分析还可以发现新特征。


4.2 特征选择

在特征提取过程中,我们尝试提取尽可能多的特征。但是太多的特征会导致过拟合和冗余。使用特征选择可以加速模型训练,有时甚至提高效率。


有很多不同的选择方法。最常用的方法是相关系数,它的取值范围在-1到1之间,用于描述两个变量之间的线性关系



相关系数矩阵是一个对称矩阵,因此我们只需要关注右上角或左下角的部分。它有两个主要部分:

i) 特征与标签之间的相关性越高,该特征就越重要。从上面的图表来看,Feature1比Feature2更重要。

ii) 特征之间的相关性越低越好。如果有两个特征具有高相关性,这可能意味着我们在提取的特征中存在冗余。

此外,我们还可以训练模型来进行特征选择,例如带有L1惩罚项的线性模型和随机森林。



图片

03

建模


终于到了机器学习的核心阶段。在这一部分,我们将选择适当的工具将一切组合起来。


5.1 常用的模型

有各种类型的机器学习模型。如果时间允许,我们可能应该尝试所有这些模型,以了解这些技术。常见的模型包括:


K最近邻(KNN



Support vector machine (SVM)



Linear model (with penalty)



Random Forest



Gradient Boost Tree (GBT)



Neural Network



幸运的是,这些模型已经存在于明确定义的包中(例如scikit-learn、XGBoost、LightGBM)并可以立即使用。但强烈建议用户在开始超参数调整之前了解其原理。


5.2 错误分析

没有完美的模型。为了了解出了什么问题,我们可以查看模型表现不佳的样本,并总结共同特点,这可以帮助我们训练更好的模型。这有点类似于集成中的提升(boosting)。但不同之处在于我们可以通过人工来实现。


5.3 超参数调整

在训练模型之前,我们需要设置超参数(例如随机森林的最大深度或梯度下降中的学习率)。要找到最佳参数相当困难。然而,根据Andrew Ng在deepingLearning.ai提供的深度学习课程中的经验,可以总结出一些规则:

  • 选择对模型性能影响较大的超参数。

  • 为每个独立参数选择搜索空间。

  • 选择搜索算法,如随机搜索和网格搜索。



5.4 验证

当测试数据的标签是未知的时候,我们需要构建验证集以便评估训练好的模型。构建验证集的朴素方法是将训练数据分为用于模型训练的训练集和用于模型验证的验证集。显然,这种方法存在一些问题,因为它没有充分利用整个训练数据。除非训练数据的规模不是问题,否则大多数研究人员会选择使用交叉验证。


交叉验证是一种重新采样过程,可用于评估有限数据样本上的机器学习。它将整个数据集分为K个组(通常选择K的范围在4到10之间)。每次我们将一个组作为测试集,然后使用其余的K-1组作为训练集来训练模型。然后,我们将计算K个模型的平均值和标准差,以评估模型的质量。



上面的过程被称为K折交叉验证(K-fold)。如果各组之间的数据标签不平衡,我们可以考虑使用分层K折交叉验证(Stratified K-fold),以保持训练集和验证集中的标签比例。


6. 集成

如果特征决定了模型的上限,那么集成可能是接近这一极限的方法。

常见的集成方式包括:Bagging(装袋法)、Boosting(提升法)、Stacking(堆叠法)和Blending(混合法)。


7. 后续分析

有时,当我们确认没有过拟合并且从交叉验证中得到了合理的良好结果时,我们在测试中可能无法获得同样好的结果。在这些情况下,训练集的分布可能与测试集非常不同。为了提高分数,我们需要调整测试结果的分布。


图片


图片


分享到: