Task01:概览西瓜书+南瓜书第1、2章

简介:

从这一章开始,我会将我读完西瓜书和南瓜书的感悟和疑问记录下来,放在这个知识库中,以后也会重读西瓜书,文章也会更新。南瓜书的电子版可以去datawhale的github仓库下载,但是南瓜书的在线阅读只提供第一版的,所以大家有条件还是买纸质版的书籍吧~

西瓜书的PDF版和南瓜书的在线阅读可以看首页

飞书文档:https://oq07ful5ge8.feishu.cn/wiki/InbSwx9uNiDf9ukUTdYcScDRnBc?from=from_copylink

一、绪论

  1. 引言

西瓜书主要围绕着“西瓜”来讲的,整个书就是围绕着如何使用一系列学习算法训练一个模型来判别“好瓜”和“坏瓜”。这里就有两个概念:学习算法和模型。我们都知道当我们判断一个瓜熟没熟都会拍一拍它,如果发出“咚,咚”的清脆声,我们能确定这个瓜熟了,这是我们日常生活的经验,在机器学习中我们称为数据。那么如何通过这些数据得到一个模型来辨别一个瓜熟没熟呢。这个就需要算法来解决,我们的算法需要学习数据的特征规律,从而生成模型。那机器学习研究的就是:在计算机上从数据中产生”模型“的算法,也称为学习算法。模型就可以理解为函数,用来解决实际问题。

  1. 基本术语

在南瓜书中,总结的基本术语有:样本、样本空间、数据集、模型、标记、泛化和分布

  1. 样本:样本也称为示例,是对一个事件或者对象的描述。例如,对西瓜的描述:(色泽:青绿;根蒂:蜷缩;敲响:浑浊)就是一个样本,其中的色泽是西瓜的一个属性,青绿是这个属性对应的一个属性值,通常我们会使用向量 \textbf{x} 来表示这些属性值也称为特征向量。

  2. 样本空间:在线性代数中向量所在的空间称为向量空间,那么样本中用来表示样本的特征向量所在的空间就称为样本空间也称属性空间。用\mathcal{X}表示

  3. 数据集:通常用来存储特征向量的集合称为数据集, D=\{x_1,x_2,···,x_m\}表示含有m个样本的数据集。

  4. 模型:刚才在引言中也介绍了,什么是模型,模型可以理解为是函数,就像我们初中解一元二次方程一样,我们将带入的数值称为训练数据,用来验证方程的称为测试数据,解出来的方程就是模型。

  5. 标记:标记也称标签是对样本结果的一个“标记”,比如我们训练集中要给定这个瓜是好瓜还是坏瓜,就需要为这个瓜打上标签,一般我们标记分为两种,一种是离散型的,一种是连续型的。离散型的表示为 \mathcal{Y}=\{0,1\},连续型的表示为 \mathcal{Y}=\R。在机器学习中有标签的任务称为“监督学习”,无标签的任务称为“无监督学习”。

  6. 泛化:泛化指的是一个模型对未知事物的判断是否准确,判断是否准确的能力称为泛化能力。

  7. 分布:这里的分布指的是概率论中的概率分布,用于表述特征向量取值的概率规律。

  1. 假设空间

“假设空间”是指对样例数据规律的学习形成的函数关系,比如南瓜书里面的房价预测,假设不同会形成不同的函数,它们都可以拟合训练数据,这些能够拟合训练数据的函数构成的集合称为“版本空间”。

对西瓜样例数据规律的学习过程称为归纳,科学推理的两大基本手段时归纳演绎,归纳是指特殊到一般泛化的过程,演绎是指一般到特殊特化的过程。归纳的过程也被称为归纳学习

  1. 归纳偏好

何为归纳偏好,在上面的假设空间中我们通过不同的假设得到两个不同的函数,使用不同假设的机器学习算法有着不同的偏好,称为“归纳偏好”。对于不同的函数,哪一个更好,“奥卡姆剃刀”认为:“若多个假设和观察一致,则选择最简单的那个”。何为最简单,对于不同的函数哪一个的复杂度最低就说明它最简单。

奥卡姆剃刀,又称奥康的剃刀,是由14世纪英格兰逻辑学家、圣方济各会修士奥卡姆的威廉提出的原理。它的经典表述是“如无必要,勿增实体”,即“简单有效原理”。这个原理的基本含义是在诸多相互竞争的理论中,选择假设最小的,也就是最简单的可能就是最正确的。它强调在解决问题时,应尽量避免不必要的复杂性,追求简单和简洁。

但是机器学习算法之间并没有优劣之分,只有是否适合解决当前问题的区分。在西瓜书中也证明了这一点:训练集之外的误差不会影响学习算法的期望值,对于任意的两个学习算法 {\mathfrak{L}}_{a}{\mathfrak{L}}_{b} 始终都有:

\sum\limits_fE_{ote}({\mathfrak{L}}_{a}|X,f)=\sum\limits_fE_{ote}({\mathfrak{L}}_{b}|X,f)

这就是,“没有免费午餐定理”(No Free Lunch Theorem)简称NFL。

该定理的核心思想是:在所有可能的问题实例上,所有优化算法在平均情况下都具有相同的性能。换句话说,没有一种通用的优化算法能在所有问题上表现得比其他算法更好。NFL定理强调了一个重要观点,即算法的性能不仅取决于算法本身,还取决于要解决的具体问题。这意味着没有一种“免费的午餐”算法,即没有一种算法可以无需关注问题的特性而在所有问题上都表现得很好。

  1. 课后习题

只写了第一题,后面会补齐的😀。

1.1

西瓜数据集

编号

色泽

根蒂

敲声

好瓜

1

青绿

蜷缩

浊响

4

乌黑

稍蜷

沉闷

通过演绎推理对整个假设空间进行搜索,删除与正例不一致的假设,得到版本空间为:

  1. (色泽=青绿)∧(根蒂= ∗ )∧(敲声= ∗ )

  2. (色泽= ∗ )∧(根蒂=蜷缩)∧(敲声= ∗ )

  3. (色泽= ∗ )∧(根蒂= ∗ )∧(敲声=浊响)

  4. (色泽=青绿)∧(根蒂=蜷缩)∧(敲声= ∗ )

  5. (色泽=青绿)∧(根蒂= ∗ )∧(敲声=浊响)

  6. (色泽= ∗ )∧(根蒂=蜷缩)∧(敲声=浊响)

  7. (色泽=青绿)∧(根蒂=蜷缩)∧(敲声=浊响)

二、模型评估与选择

  1. 经验误差与过拟合

  • 错误率:我们通常把分类错误的样本数占样本总数的比例称为“错误率”,表示为 E=\frac{a}{m}, 其中m 为样本个数, a 为分类错误的样本个数。

  • 精度:1-错误率

  • 误差:学习器的实际预测输出与样本的真实输出之间的差异。

  • 经验误差:学习器在训练集上的误差,也称“训练误差”。

  • 泛化误差:学习器在新样本上的误差。

为了得到更好的学习器,我们会从样本中尽可能的学习适用于所有潜在样本的“普遍规律”,但是如果这个“普遍规律”学的太过了,就会出现对新样本判断的错误,这称为过拟合,就像我们在微调大语言模型的时候,如果训练的epoch过大就会出现过拟合的情况,但是如果epoch过小就会出现另一种情况,欠拟合。如何解决这种情况,这就是机器学习中的“模型选择”问题了,理想的解决方案是对候选模型的泛化误差进行评估,选择泛化误差最小的那个模型。现实中如何进行模型评估和选择也是一个问题。

  1. 评估方法

这一节介绍了三种模型评估方法:留出法、交叉验证法、自助法

留出法是对单一数据集划分的方法,它直接将数据集 D划分为两个互斥的集合,一个作为训练集 S一个作为测试集 T,在训练集上训练出模型后用测试机评估测试误差,作为对泛化误差的估计。但是由于训练集包含大多数的样本,训练出来的模型更接近用 D训练出的模型,所以这样测试的结果不够准确,反之测试相差较大。常见的作法是将大约 2/3-4/5的数据样本用于训练。

交叉验证法与留出法相似,它将数据集 D划分为 k个互斥子集,通过分层采样得到每个子集 D_i,然后每次用 k-1个子集作为训练集,剩下的作为测试集,这样就可以进行 k 次训练和测试,这种交叉验证法也被称为“k折交叉验证”。交叉验证法常用于对比同一算法的不同配置之间的效果。并且在交叉验证法中有个特例:留一法(Leave-One-Out,简称LOO),即当数据集有 m 个样本k=m。这种方法的我缺点也很明显,当数据较大时,计算开销也是非常大的,而且估算的结果也未必有其他评估方法的准确,NFL定理可以证明这一点。

自助法是以自动采样法为基础的,给定包含m 个样本的数据集D,我们对它进行采样,产生数据集D:每次随机从D中挑选一个样本,将其拷贝放入D',然后再将该样本放回初始数据集D 中;这个过程重复执行m次后,我们就得到了包含m 个样本的数据集D',这就是自助采样的结果。然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。

调参与最终模型中,参数一般指的是算法本身的一些参数也称超参数,参数模型不同学得模型的性能往往有显著差别。调参和算法选择没什么本质区别:对每种参数配置都训练出模型,然后把对应最好模型的参数作为结果。但是学习算法的很多参数是在实数范围内取值,所以要对每个参数选定一个范围和变化步长。为模型配置好相应的模型参数后,就可以对新样本做预测了。

在模型评估与选择中用于评估测试的数据集称为“验证集”

  1. 性能度量

性能度量就是衡量模型泛化能力的评价标准。性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果;这意味着模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。

这小节的性能度量指标比较多,我们一个一个来说:

  1. 错误率和精度:这是分类任务中最常用的两种性能度量,错误率定义为 E(f;D)=\frac{1}{m}\sum\limits_{i = 1}^m\mathbb{I}\left( f\left( {\mathbf{x}}_{i} \right) {\neq} y_{i} \right),精度定义为 \operatorname{acc}(f;D) = \frac{1}{m}\sum\limits_{i = 1}^m\mathbb{I}\left( f\left( {\mathbf{x}}_{i} \right) = y_{i} \right) = 1 {-} E(f;D)\text{.}。这些表达的假设数据都是均匀分布的。一般的对于数据分布\mathcal{D} 和概率密度函数 p({\cdot})表示分别为: E\left( f;\mathcal{D} \right) = {{\int}}_{\mathbf{x} {\sim} \mathcal{D}}\mathbb{I}\left( f\left( \mathbf{x} \right) {\neq} y \right)p\left( \mathbf{x} \right)\mathrm{d}\mathbf{x}E\left( f;\mathcal{D} \right) = {{\int}}_{\mathbf{x} {\sim} \mathcal{D}}\mathbb{I}\left( f\left( \mathbf{x} \right) = y \right)p\left( \mathbf{x} \right)\mathrm{d}\mathbf{x} = 1 {-} E(f;D)\text{.}

  2. 查准率、查全率与F1:查准率和查全率也被称为准确率和召回率,对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(truepositive)假正例(falsepositive)真反例(true negative)假反例(falsenegative)四种,其中,真正例是指被模型正确预测为正例的样本,假正例是指被模型错误预测为正例的样本,真正例和假负例的定义与准确率中的相同,假负例是指被模型错误预测为负例的样本。所以查准率和查全率分别定义为: 查准率=真正例+\frac{假正例}{真正例}查全率=真正例+\frac{假负例}{真正例}。F1则是基于查准率和查全率的,它被定义为 F1=\frac{2×查准率×查全率}{查准率+查全率}

  3. ROC和AUC:ROC全称为受试者工作特征曲线,是研究学习器泛化性能的有利工具,它通过绘制真正例率和假正例率之间的关系曲线,来评估模型在不同的分类阈值下的性能表现。AUC是ROC曲线下的面积,用于量化ROC曲线的性能指标。AUC的取值范围在0.5到1之间,AUC越接近1,表示模型的分类性能越好,即模型能够更好地区分正例和负例。 有\mathrm{AUC} = 1 {-} {{\ell}}_{\text{rank }}

  4. 代价敏感错误率与代价曲线:代价敏感错误率是指在分类问题中,不同类别的错误分类所造成的代价不同。因为ROC曲线不能直接反映出学习器的期望总体代价,代价曲线则可以吗,它通过绘制不同分类阈值下模型的错误分类代价,帮助我们选择合适的阈值来平衡不同类别的错误分类代价。代价曲线上的点表示模型在不同阈值下的错误分类代价,通过观察曲线的形状和位置,可以评估模型在不同操作条件下的性能。代价曲线的横轴是正例概率代价 P(+)cost,纵轴是归一化代价 cost_{norm}

  1. 比较检验

关于为什么进行比较检验,西瓜书在这一节的开头也讲到了:1.模型泛化能力结果比较的不确定性;2.测试集样例的不同对测试结果的影响;3.机器学习算法具有随机性。

在这小节中,介绍了几种检验方法:假设检验、t检验、McNemar检验和Friedman检验与Nemenyi后续检验

  1. 假设检验:假设检验中的“假设”是对学习器泛化错误率分布的某种判断或猜想,但是现实任务中我们并不知道学习器的泛化错误率,只能获知其测试错误率,但是直观来看二者比较接近,所以可以根据测试错误率估推出泛化错误率的分布。

  2. t检验:“t检验”是一种用于比较两个样本均值差异的统计检验方法。它基于t分布,用于检验两个样本的均值是否存在显著差异。t检验可以分为单样本t检验(用于比较单个样本的均值与已知均值的差异)、独立双样本t检验(用于比较两个独立样本的均值差异)和配对双样本t检验(用于比较同一组样本在不同条件下的均值差异)。

  3. McNemar检验:对二分类问题,使用留出法不仅可估计出学习器A和B的测试错误率,还可获得两学习器分类结果的差别,即两者都正确、都错误、一个正确另一个错误的样本数,根据这些样本数生成二分特征的2x2列联表,用于检验行和列的边际频率是否相等,即是否存在“边际同质性”。

  4. Friedman检验与Nemenyi后续检验:为了在一组数据集上对多个算法进行比较,使用Friedman检验,一种基于算法排序的检验方法,它基于秩和统计量,通过比较不同处理方法或算法在多个数据集上的性能排名,来判断它们之间的差异是否显著。如果Friedman检验拒绝了所有处理方法或算法性能相同的原假设,那么就需要进行后续检验--Nemenyi检验,它会计算出平均序值差别的临界值域,来进一步区分各个处理方法或算法之间的差异。

  1. 偏差与方差

为了了解学习算法“为什么”具有这样的性能,我们通过“偏差-方差分解”来解释学习算法的泛化性能。这个方法试图将学习算法的期望泛化错误率进行拆解,对于回归任务,可以将泛化误差分解为偏差、方差和噪声之和。

  • 偏差 {\operatorname{bias}}^{2}\left( \mathbf{x} \right) = {\left( \bar{f}\left( \mathbf{x} \right) {-} y \right)}^{2}衡量了模型的预测结果在多大程度上偏离了真实值。

  • 方差 \operatorname{var}\left( \mathbf{x} \right) = {\mathbb{E}}_{D}\left\lbrack {\left( f\left( \mathbf{x};D \right) {-} \bar{f}\left( \mathbf{x} \right) \right)}^{2} \right\rbrack衡量了模型的预测结果对训练数据的敏感程度。

  • 噪声 {\varepsilon}^{2} = {\mathbb{E}}_{D}\left\lbrack {\left( y_{D} {-} y \right)}^{2} \right\rbrack衡量了学习算法在学习任务上所能达到期望泛化的下界。

一般来说,偏差与方差是有冲突的,这称为偏差-方差窘境(bias-variancedilemma)。当我们给定学习任务,假定我们能控制学习算法的训练程度,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率;在训练程度充足后,学习器的拟合能力已非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。——西瓜书2.5最后一段

  1. 课后作业

还没写🤭

总结:

第一章和第二章可以总结为一个学习算法训练流程,从数据处理模型选择,模型选择要根据学习任务类型和数据特点,选择合适的机器学习算法和模型结构,通过模型训练调整参数来优化算法,模型评估选择适合学习任务的评估方法对学习算法的泛化能力进行评估,以及了解学习算法“为什么”具有这样的性能引出了评估模型性能的两个重要指标偏差方差以及噪声它会对学习算法的泛化能力产生影响。关于这些概念还是要结合实际问题进行理解,比如噪声在视频生成领域影响会很大。

文章还有挺多的地方不太完善,后续会继续完善文章的😀~