25-8杂谈
过的非常快的八月,2025年的暑假就此结束了。漫无止境的八月是不存在的,但那些美好的回忆将永驻,即便夏日将终。
kaggleIntrotoDeepLearningBinaryClassification
Introduction到目前为止,在本课程中,我们已经学习了神经网络如何解决回归问题。现在,我们将把神经网络应用于另一个常见的机器学习问题:分类。到目前为止,我们学到的大部分内容仍然适用。主要区别在于我们使用的损失函数以及我们希望最终层产生的输出类型。
Binary Classification将数据分为两类是机器学习中常见的问题。你可能想预测客户是否有可能购买,信用卡交易是否属于欺诈行为,深空信号是否显示新行星存在的证据,或者医学检测是否显示疾病存在的证据。这些都是二分类问题。
在原始数据中,类别可能用字符串表示,例如“是”和“否”,或者“狗”和“猫”。在使用这些数据之前,我们需要分配一个类别标签:一个类别为“0”,另一个类别为“1”。分配数字标签可以将数据转换为神经网络可以使用的形式。
Accuracy and Cross-Entropy准确率是衡量分类问题成功与否的众多指标之一。准确率是正确预测数与总预测数之比:准确率 = 正确数 / 总数。一个始终预测正确的模型的准确率得分为 1.0。在其他条件相同的情况下,当数据集中的类别出现频率大致相同时,准确率是一个合理的指标。
准确率 ...
kaggleIntrotoDeepLearningDropoutandBatchNormalization
Introduction深度学习的世界远不止密集层。你可以为模型添加数十种类型的层。(不妨浏览 Keras 文档 获取示例!)有些层类似于密集层,用于定义神经元之间的连接;有些层可以进行预处理或其他类型的转换。
在本课中,我们将学习两种特殊的层,它们本身不包含任何神经元,但会添加一些功能,有时可以通过多种方式使模型受益。这两种层在现代架构中都很常用。
Dropout第一个是“dropout 层”,它可以帮助纠正过拟合。
在上一课中,我们讨论了网络在训练数据中学习虚假模式是如何导致过拟合的。为了识别这些虚假模式,网络通常会依赖于非常具体的权重组合,这是一种权重的“阴谋”。由于过于具体,这些组合往往很脆弱:移除一个,这种阴谋就会瓦解。
这就是 dropout 背后的想法。为了打破这些阴谋,我们在训练的每一步随机地“丢弃”一部分层输入单元,这使得网络更难在训练数据中学习这些虚假模式。相反,它必须搜索更广泛的、通用的模式,这些模式的权重模式往往更稳健。
这里,两个隐藏层之间添加了 50% 的 Dropout。
您也可以将 Dropout 视为创建一种网络集成。预测将不再由一个大型网络进行,而是 ...
kaggleIntrotoDeepLearningOverfittingandUnderfitting
Introduction回想一下上一课中的示例,Keras 会保存模型训练过程中各个时期的训练和验证损失历史记录。在本课中,我们将学习如何解读这些学习曲线,以及如何利用它们来指导模型开发。具体来说,我们将分析学习曲线中是否存在“欠拟合”和“过拟合”的证据,并探讨一些纠正策略。
Interpreting the Learning Curves验证损失是对未见数据的预期误差的估计。
现在,无论是当模型学习信号还是学习噪声时,训练损失都会下降。但只有当模型学习信号时,验证损失才会下降。(模型从训练集学习到的任何噪声都不会推广到新数据。)因此,当模型学习信号时,两条曲线都会下降,但当模型学习噪声时,曲线中就会出现一个“缺口”。缺口的大小表明模型学习了多少噪声。
理想情况下,我们应该创建学习所有信号而不学习任何噪声的模型。但这几乎永远不会发生。相反,我们会进行权衡。我们可以让模型学习更多信号,代价是学习更多噪声。只要这种权衡对我们有利,验证损失就会持续下降。然而,在某个点之后,这种权衡可能会对我们不利,成本超过收益,验证损失就会开始上升。
现在,无论是当模型学习信号还是学习噪声时,训练损失都会下 ...
kaggleIntrotoDeepLearningStochasticGradientDescent
Introduction在前两课中,我们学习了如何通过堆叠密集层来构建全连接网络。网络在初始创建时,所有权重都是随机设置的——网络当时还“不知道”任何信息。在本课中,我们将学习如何训练神经网络;我们将了解神经网络如何“学习”。
与所有机器学习任务一样,我们从一组训练数据开始。训练数据中的每个示例都包含一些特征(输入)和一个预期目标(输出)。训练网络意味着调整其权重,使其能够将特征转化为目标。例如,在“80 种谷物”数据集中,我们希望网络能够获取每种谷物的“糖”、“纤维”和“蛋白质”含量,并预测该谷物的“卡路里”。如果我们能够成功地训练一个网络来实现这一点,那么它的权重必须以某种方式表示这些特征与训练数据中所表达的目标之间的关系。
除了训练数据,我们还需要两样东西:
一个“损失函数”,用于衡量网络预测的准确性。
一个“优化器”,用于指导网络如何调整其权重。
The Loss Function我们已经了解了如何设计网络架构,但尚未了解如何告诉网络要解决什么问题。这就是损失函数的作用。
损失函数衡量目标真实值与模型预测值之间的差异。
不同的问题需要不同的损失函数。我们一直在研究回归问题, ...
kaggleIntrotoDeepLearningDeepNeuralNetworks
Introduction在本课中,我们将学习如何构建能够学习深度神经网络所擅长的复杂关系的神经网络。
这里的关键思想是模块化,即由更简单的功能单元构建复杂的网络。我们已经了解了线性单元如何计算线性函数——现在我们将学习如何组合和修改这些单个单元来模拟更复杂的关系。
Layers神经网络通常将神经元组织成层。当我们将具有共同输入集的线性单元聚集在一起时,我们就得到了一个密集层。
两个线性单元的密集层接收两个输入和一个偏差。
你可以将神经网络中的每一层想象成执行某种相对简单的变换。通过深层的堆叠,神经网络可以以越来越复杂的方式转换其输入。在一个训练有素的神经网络中,每一层都是一种变换,让我们离解决方案更近一步。
多种类型的层Keras 中的“层”是一种非常通用的概念。层本质上可以是任何类型的数据转换。许多层,例如卷积层和循环层,通过使用神经元来转换数据,其主要区别在于它们形成的连接模式。而其他层则用于特征工程或仅仅简单的算术运算。还有各种各样的层等待您去探索——快来查看!
The Activation Function然而,事实证明,两个中间没有任何中间层的密集层并不比单独的一个密集层 ...
kaggleIntrotoDeepLearningASingleNeuron
Welcome to Deep Learning!欢迎来到 Kaggle 的“深度学习入门”课程!您将学习构建自己的深度神经网络所需的一切知识。您将学习如何使用 Keras 和 Tensorflow:
创建全连接神经网络架构
将神经网络应用于两个经典的机器学习问题:回归和分类
使用随机梯度下降训练神经网络,以及
使用dropout、批量归一化和其他技术提升性能
本教程将通过完整的示例向您介绍这些主题,然后在练习中,您将更深入地探索这些主题,并将其应用于实际数据集。
让我们开始吧!
What is Deep Learning?近年来,人工智能领域一些最令人瞩目的进步都集中在深度学习领域。在自然语言翻译、图像识别和游戏玩法等任务中,深度学习模型的表现已经接近甚至超越了人类水平。
那么,什么是深度学习呢?深度学习是一种以深度计算为特征的机器学习方法。正是这种计算深度使得深度学习模型能够解析现实世界中最具挑战性数据集中各种复杂且层次化的模式。
凭借其强大的功能和可扩展性,神经网络已成为深度学习的标志性模型。神经网络由神经元组成,每个神经元单独执行简单的计算。神经网络的强大之处在于这些神经元 ...
kaggleIntermediateMachineLearningDataLeakage
在本教程中,您将了解什么是数据泄漏以及如何预防它。如果您不知道如何预防,泄漏就会频繁发生,并会以微妙而危险的方式破坏您的模型。因此,这是实践数据科学家最重要的概念之一。
Introduction数据泄漏(或泄漏)是指你的训练数据包含目标信息,但在使用模型进行预测时无法获得类似的数据。这会导致模型在训练集(甚至验证集)上表现出色,但在生产环境中表现不佳。
换句话说,泄漏会导致模型看起来很准确,直到你开始用它做决策,然后模型就会变得非常不准确。
泄漏主要有两种类型:目标泄漏和训练-测试污染。
目标泄漏目标泄漏是指你的预测器包含在你进行预测时无法获得的数据。重要的是要从数据可用的时间或时间顺序来考虑目标泄漏,而不仅仅是某个特征是否有助于做出正确的预测。
举个例子会有所帮助。假设你想预测谁会患肺炎。你的原始数据的前几行如下所示:
got_pneumonia
age
weight
male
took_antibiotic_medicine
…
False
65
100
False
False
…
False
72
130
True
False
…
True
58
100
Fa ...
kaggleIntermediateMachineLearningXGBoost
在本教程中,你将学习如何使用梯度提升来构建和优化模型。该方法在众多 Kaggle 比赛中占据主导地位,并在各种数据集上取得了最佳结果。
Introduction在本课程的大部分内容中,您已经使用随机森林方法进行了预测,该方法通过对多棵决策树的预测进行平均,实现了比单棵决策树更好的性能。
我们将随机森林方法称为“集成方法”。根据定义,集成方法会组合多个模型(例如,在随机森林中,是多棵树)的预测。
接下来,我们将学习另一种集成方法,称为梯度提升。
Gradient Boosting梯度提升 是一种循环迭代地将模型添加到集成中的方法。
它首先用一个模型初始化集成,该模型的预测结果可能非常不准确。(即使它的预测结果非常不准确,后续添加到集成中的模型也会纠正这些错误。)
然后,我们开始循环:
首先,我们使用当前集成对数据集中的每个观测值生成预测。为了进行预测,我们将集成中所有模型的预测结果相加。
这些预测结果用于计算损失函数(例如 均方误差)。
然后,我们使用损失函数拟合一个即将添加到集成中的新模型。具体来说,我们确定模型参数,以便将这个新模型添加到集成中可以降低损失。 (附注:“梯度提升”中 ...
kaggleIntermediateMachineLearningCross-Validation
Introduction机器学习是一个迭代过程。
您将面临关于使用哪些预测变量、使用哪些类型的模型、为这些模型提供哪些参数等的选择。到目前为止,您已经通过使用验证集(或保留集)来衡量模型质量,以数据驱动的方式做出了这些选择。
但这种方法存在一些缺点。为了说明这一点,假设您有一个包含 5000 行数据的数据集。您通常会保留大约 20% 的数据作为验证数据集,即 1000 行。但这会在确定模型得分时留下一些随机因素。也就是说,一个模型可能在一个包含 1000 行的数据集上表现良好,即使在另一个包含 1000 行的数据集上可能不准确。
在极端情况下,您可以想象验证集中只有一行数据。如果您比较不同的模型,那么哪个模型对单个数据点的预测结果最佳,很大程度上取决于运气!
一般来说,验证集越大,我们衡量模型质量的随机性(也就是“噪声”)就越小,模型就越可靠。可惜的是,我们只能通过从训练数据中删除行来获得更大的验证集,而训练数据集越小,模型就越差!
What is cross-validation?在交叉验证中,我们会对数据的不同子集运行建模流程,以获得多种模型质量指标。
例如,我们可以先将数据分成 ...
kaggleIntermediateMachineLearningPipelines
在本教程中,您将学习如何使用管道来清理您的建模代码。
简介管道是一种让您的数据预处理和建模代码井然有序的简单方法。具体来说,管道将预处理和建模步骤捆绑在一起,以便您可以像使用单个步骤一样使用整个捆绑包。
许多数据科学家在不使用管道的情况下拼凑模型,但管道有一些重要的好处。这些好处包括:
更清晰的代码:在预处理的每个步骤中计算数据可能会变得混乱。使用管道,您无需在每个步骤中手动跟踪训练和验证数据。
更少的错误:误用步骤或忘记预处理步骤的机会更少。
更容易投入生产:将模型从原型过渡到可大规模部署的模型可能出奇地困难。我们在这里不会讨论许多相关的问题,但管道可以提供帮助。
更多模型验证选项:您将在下一个教程中看到一个涵盖交叉验证的示例。
示例与上一个教程一样,我们将使用墨尔本住房数据集。
我们不会重点介绍数据加载步骤。您可以假设您已经拥有 X_train、X_valid、y_train 和 y_valid 中的训练和验证数据。
import pandas as pdfrom sklearn.model_selection import train_test_split# Read the ...
kaggleIntermediateMachineLearningCategoricalVariables
在本教程中,您将了解什么是分类变量,以及处理此类数据的三种方法。
简介分类变量仅接受有限数量的值。
假设有一项调查询问您多久吃一次早餐,并提供四个选项:“从不”、“很少”、“大多数日子”或“每天”。在这种情况下,数据是分类的,因为回复属于一组固定的类别。
如果人们回答了一项关于他们拥有什么品牌的汽车的调查,回复将分为“本田”、“丰田”和“福特”等类别。在这种情况下,数据也是分类的。
如果您尝试在未预先处理这些变量的情况下将其插入到大多数 Python 机器学习模型中,则会收到错误。在本教程中,我们将比较三种可用于准备分类数据的方法。
三种方法1) 删除分类变量处理分类变量最简单的方法是将其从数据集中移除。这种方法只有在列不包含有用信息的情况下才有效。
2) 序数编码序数编码 将每个唯一值分配给不同的整数。
这种方法假设类别具有一定的顺序:“从不”(0) < “很少”(1) < “大多数日子”(2) < “每天”(3)。
此假设在本例中是合理的,因为类别的排序是毋庸置疑的。并非所有分类变量的值都有明确的顺序,但我们将这些有明确顺序的变量称为序数变量。对于基于树的模 ...
