当前位置: 首页 > article >正文

西瓜书读书笔记整理(三)—— 第二章 模型评估与选择

第二章 模型评估与选择

  • 第 2 章 模型评估与选择
    • 2.1 经验误差与过拟合
      • 1. 错误率 / 精度 / 误差
      • 2. 训练误差 / 经验误差 / 泛化误差
      • 3. 过拟合 / 欠拟合
      • 4. 学习能力
      • 5. 模型选择
    • 2.2 评估方法
      • 1. 评估方法概述
      • 2. 留出法
      • 3. 交叉验证法
      • 4. 自助法
      • 5. 调参 / 最终模型
    • 2.3 性能度量
      • 1. 回归任务的性能度量
      • 2. 分类任务性能度量方法 —— 错误率 / 精度
      • 3. 分类任务性能度量方法 —— 查准率 / 查全率 / F1
      • 4. ROC 曲线
      • 5. AUC 曲线
    • 2.4 比较检验
      • 1. 什么是比较验证
      • 2. 假设验证
    • 2.5 偏差与方差
      • 1. 偏差与方差
      • 2. 泛化误差 / 偏差 / 方差 / 噪声

第 2 章 模型评估与选择

2.1 经验误差与过拟合

1. 错误率 / 精度 / 误差

错误率(error rate):分类错误的样本数占样本总数的比例。

精度(accuracy):分类正确的样本数占样本总数的比例。

误差(error):学习器的实际预测输出与样本的真实输出质检的差异。

2. 训练误差 / 经验误差 / 泛化误差

**训练误差(training error)**或 经验误差(empirical error):学习器在训练集上的误差。

泛化误差(generalization error):模型在新样本上的误差。

3. 过拟合 / 欠拟合

过拟合(overfitting) 指的是机器学习模型在训练数据集上表现非常好,但在新的测试数据上表现较差的情况。过拟合的主要原因是模型过于复杂,拟合了训练数据集中的噪声和细节,导致泛化能力差。简单来说,过拟合是指模型过分追求“记忆”训练数据集,而忽略了“理解”数据背后的规律,导致在新的数据上表现不佳。

过拟合可以通过以下方法来避免:

  • 增加更多的训练数据,使得模型更具泛化能力。
  • 减少特征数量,避免过于复杂的模型。
  • 增加正则化项,如L1、L2正则化等,使得模型更加平滑。
  • 使用dropout等技巧随机削弱一部分神经元的输出,减少模型的复杂性。

欠拟合(underfitting) 指的是机器学习模型在训练数据集上和测试数据集上的表现都比较差,这意味着模型没有很好地捕捉到数据的规律和模式。欠拟合的主要原因是模型过于简单,无法拟合数据集的复杂度和非线性关系。简单来说,欠拟合是指模型过于简单,无法捕捉到数据集的全部信息。

欠拟合可以通过以下方法来避免:

  • 增加更多的特征,以更好地捕捉数据的复杂性和非线性关系。
  • 增加模型的复杂度,如增加层数或节点数等。
  • 减少正则化项的强度,使得模型更加灵活。
  • 使用更复杂的算法或模型,如神经网络等。

需要注意的是,过度拟合和欠拟合都会导致模型的泛化能力下降,因此需要在两者之间进行权衡,选择最适合的模型和算法。

4. 学习能力

机器学习中模型的学习能力指的是模型通过训练数据学习到数据之间的关系和规律的能力。具体来说,模型的学习能力可以体现在以下方面:

  • 模型的表示能力:模型的表示能力越强,它能够拟合的函数空间就越大,因此可以更好地逼近数据的真实分布。

  • 模型的泛化能力:泛化能力指的是模型对于新数据的预测能力。当模型的泛化能力很强时,它可以对未见过的数据做出准确的预测。反之,如果模型的泛化能力很差,则无法对新数据进行准确的预测。

  • 模型的训练能力:模型的训练能力指的是它能够从训练数据中学习到什么程度。当模型的训练能力很强时,它可以从少量的训练数据中学习到更多的信息,从而更好地逼近数据的真实分布。

  • 模型的收敛速度:模型的收敛速度指的是它学习到数据分布的速度。当模型的收敛速度很快时,它可以在较短的时间内学习到数据之间的关系和规律。

在机器学习中,选择一个具有良好学习能力的模型是非常重要的。不同的机器学习算法和模型具有不同的学习能力,因此需要根据具体的问题和数据选择最适合的算法和模型。

学习能力是否 “过于强大”,是由学习算法和数据内涵共同决定的。

5. 模型选择

在机器学习中,选择合适的模型对于建立一个成功的机器学习系统来说非常重要。以下是一些常见的模型选择方法:

  • 经验法则:根据问题的性质和数据的特点选择合适的模型。例如,如果数据具有线性关系,可以选择线性回归模型;如果数据具有非线性关系,可以选择支持向量机或神经网络等非线性模型。

  • 交叉验证:使用交叉验证方法评估不同模型的性能,并选择最佳模型。交叉验证将数据集分为训练集和测试集,然后多次训练和测试模型,并计算平均测试误差。通过比较不同模型的测试误差,可以选择性能最佳的模型。

  • 正则化方法:使用正则化方法对不同的模型进行比较,选择最佳的模型。正则化方法通过对模型参数进行约束来避免过拟合,同时减少模型的复杂度,从而提高模型的泛化能力。

  • 模型融合方法:使用多个模型组合来提高预测性能。模型融合方法可以是简单的平均或加权平均,也可以是基于模型的集成方法,例如随机森林和Boosting等。

  • 模型选择工具:使用一些开源的模型选择工具,例如scikit-learn和TensorFlow等,这些工具提供了多种不同的机器学习算法和模型,同时提供了评估和比较不同模型的方法。

需要注意的是,在选择模型时需要考虑多个因素,例如数据的特点、问题的性质、模型的复杂度、模型的训练时间等等。选择合适的模型需要综合考虑这些因素,并根据具体的问题和需求来进行选择。

2.2 评估方法

1. 评估方法概述

通常,我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此,需使用一个 “测试集(testomg set)” 来测试学习器对新样本的判别能力,然后以测试集上的 “测试误差(tesing error)” 作为泛化误差的近似。通常我们假设测试样本也是从样本真实分布中独立同分布采样而得。但需要注意的是,测试集应该尽可能与训练集互斥,即测试集尽量不在训练集中出现、未在训练过程中使用过。

2. 留出法

留出法(hold-out)直接将数据集 D D D 划分为两个互斥的集合,其中一个集合作为训练集 S S S,另外一个作为测试集 T T T,即 D = S ⋃ T D=S \bigcup T D=ST S ⋂ T = ⊘ S \bigcap T = \oslash ST=。在 S S S 上训练出模型后,用 T T T 来评估其测试误差,作为对泛化误差的估计。

3. 交叉验证法

交叉验证法(cross valida tion)先将数据集 D D D 划分为 k k k 个大小相似的互斥子集,即 D = D 1 ∪ D 2 ∪ . . . ∪ k D=D_1 \cup D_2 \cup ...\cup_k D=D1D2...k D i ⋂ D j = ⊘ D_i \bigcap D_j =\oslash DiDj=。每个子集 D i D_i Di 都尽可能保持数据分布的一致性,即从 D D D 中通过分层采样得到。然后,每次用 k − 1 k-1 k1 个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得 k k k 组训练 / 测试集,从而可进行 k k k 次训练和测试,最终返回的是这 k k k 个测试结果的均值。

显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k k k 的取值,为强调这一点,通常把交叉验证法称为 “ k k k 折交叉验证” ( k k k-fold cross validation)。

k k k 最常用的取值是 10,此时称为 10 折交叉验证;其他常用的 k k k 值有 5、20 等。

4. 自助法

自助法(bootstrapping)是一种非参数统计方法,用于从有限的样本数据集中估计统计量的分布和置信区间。自助法是通过从原始数据集中随机抽取样本形成新的数据集,并重复这个过程多次来得到估计统计量的分布。这个过程可以产生多个样本数据集,每个数据集的样本数和原始数据集相同,但可能包含重复的样本数据。

自助法的基本思想是通过对原始数据进行有放回的抽样来模拟从总体中抽样。由于样本的重复采样,部分样本可能在某次采样中被重复选择,而另一些样本可能在某些采样中没有被选择。这样可以形成一个更广泛的样本空间,并且可以通过这些不同的样本数据集来估计统计量的置信区间。

自助法可以用于解决小样本数据集的统计问题,并且具有一定的鲁棒性和准确性。例如,在机器学习中,自助法可以用于估计模型参数的置信区间,从而评估模型的稳定性和准确性。自助法还可以用于特征选择、模型选择和模型融合等问题,它是一种常用的非参数统计方法。

5. 调参 / 最终模型

大多数学习算法都有些参数 (parameter) 需要设定,参数配置不同 ,学得模型的性能往往有显著差别,因此,在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,这就是通常所说的 “参数调节” 或简称 “调参” (parameter tuning)。

2.3 性能度量

1. 回归任务的性能度量

回归任务最常用的性能度量是 “均方误差”(mean squared error)。

E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 (2.2) E(f ; D)=\frac{1}{m} \sum_{i=1}^m\left(f\left(\boldsymbol{x}_i\right)-y_i\right)^2 \tag{2.2} E(f;D)=m1i=1m(f(xi)yi)2(2.2)

更一般的,对于数据分布 D \mathcal{D} D 和概率密度函数 p ( ⋅ ) p(\cdot) p(),均方误差可描述为

E ( f ; D ) = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d x (2.3) E(f ; \mathcal{D})=\int_{\boldsymbol{x} \sim \mathcal{D}}(f(\boldsymbol{x})-y)^2 p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x} \tag{2.3} E(f;D)=xD(f(x)y)2p(x)dx(2.3)

2. 分类任务性能度量方法 —— 错误率 / 精度

错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。对样本集 D \mathcal{D} D,分类错误率定义为

E ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) (2.4) E(f ; D)=\frac{1}{m} \sum_{i=1}^m \mathbb{I}\left(f\left(\boldsymbol{x}_i\right) \neq y_i\right) \tag{2.4} E(f;D)=m1i=1mI(f(xi)=yi)(2.4)

精度则定义为

acc ⁡ ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) = 1 − E ( f ; D ) . (2.5) \begin{aligned} \operatorname{acc}(f ; D) & =\frac{1}{m} \sum_{i=1}^m \mathbb{I}\left(f\left(\boldsymbol{x}_i\right)=y_i\right) \\ & =1-E(f ; D) . \end{aligned} \tag{2.5} acc(f;D)=m1i=1mI(f(xi)=yi)=1E(f;D).(2.5)

更一般的,对于数据分布 D \mathcal{D} D 和概率密度函数 p ( ⋅ ) p(\cdot) p(),错误率与精度可分别描述为

E ( f ; D ) = ∫ x ∼ D I ( f ( x ) ≠ y ) p ( x ) d x (2.6) E(f ; \mathcal{D})=\int_{\boldsymbol{x} \sim \mathcal{D}} \mathbb{I}(f(\boldsymbol{x}) \neq y) p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x} \tag{2.6} E(f;D)=xDI(f(x)=y)p(x)dx(2.6)

acc ⁡ ( f ; D ) = ∫ x ∼ D I ( f ( x ) = y ) p ( x ) d x = 1 − E ( f ; D ) (2.7) \begin{aligned} \operatorname{acc}(f ; \mathcal{D}) & =\int_{\boldsymbol{x} \sim \mathcal{D}} \mathbb{I}(f(\boldsymbol{x})=y) p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x} \\ & =1-E(f ; \mathcal{D}) \tag{2.7} \end{aligned} acc(f;D)=xDI(f(x)=y)p(x)dx=1E(f;D)(2.7)

3. 分类任务性能度量方法 —— 查准率 / 查全率 / F1

对于二分类问题,如下所示:

全称真实值(标签,label)预测值(predict)
TPTrue Positive11
FPFalse Positive01
TNTrue Negative00
FNFalse Negative10

查准率(precision)

P = T P T P + F P (2.8) P=\frac{T P}{T P+F P} \tag{2.8} P=TP+FPTP(2.8)

查全率(recall)

R = T P T P + F N (2.9) R=\frac{T P}{T P+F N} \tag{2.9} R=TP+FNTP(2.9)

更常用的是 F 1 F1 F1 度量:

F 1 = 2 × P × R P + R = 2 × T P  样例总数  + T P − T N .  (2.10) F 1=\frac{2 \times P \times R}{P+R}=\frac{2 \times T P}{\text { 样例总数 }+T P-T N} \text {. } \tag{2.10} F1=P+R2×P×R= 样例总数 +TPTN2×TP(2.10)

4. ROC 曲线

ROC(Receiver Operating Characteristic)曲线是一种用于评估二元分类器性能的图形工具。ROC曲线以真阳性率(True Positive Rate,TPR)为纵坐标,以假阳性率(False Positive Rate,FPR)为横坐标,用于衡量分类器的敏感性和特异性。

T P R = T P T P + F N (2.18) \mathrm{TPR}=\frac{T P}{T P+F N} \tag{2.18} TPR=TP+FNTP(2.18)

F P R = F P T N + F P (2.19) \mathrm{FPR}=\frac{F P}{T N+F P} \tag{2.19} FPR=TN+FPFP(2.19)

在ROC曲线中,每个点代表分类器在不同的阈值下的TPR和FPR。通过改变分类器的阈值,可以得到不同的点,并将这些点连接起来得到ROC曲线。曲线下面积(Area Under Curve,AUC)可以用来衡量分类器的性能,AUC的取值范围为0.5到1,AUC越大表示分类器的性能越好。

ROC曲线的优点在于不受分类器阈值的影响,同时可以通过比较不同分类器的ROC曲线来评估它们的性能。ROC曲线也适用于不平衡数据集的分类问题,其中一类样本数量较少,例如医学诊断和欺诈检测等应用场景。

需要注意的是,ROC曲线不能直接用于比较多类别分类器的性能。对于多类别分类问题,可以使用一些衍生自ROC曲线的评估指标,例如微平均(micro-averaging)和宏平均(macro-averaging)等。

下面是一个示例ROC曲线:

在这里插入图片描述

在这个例子中,横轴是假阳性率(False Positive Rate,FPR),纵轴是真阳性率(True Positive Rate,TPR)。假阳性率是指实际为负样本但被错误地预测为正样本的样本占所有负样本的比例,真阳性率是指实际为正样本且被正确地预测为正样本的样本占所有正样本的比例。

ROC曲线显示了分类器在不同阈值下的性能,阈值从左上角到右下角逐渐增加。曲线下面积(Area Under Curve,AUC)为0.91,说明该分类器的性能很好。通常,AUC的取值范围为0.5到1,AUC越大表示分类器的性能越好。

在实际应用中,可以根据ROC曲线选择合适的分类器和阈值,以达到最佳的分类性能。

5. AUC 曲线

AUC(Area Under Curve)曲线是ROC(Receiver Operating Characteristic)曲线下方的面积,用于评估二元分类器的性能。AUC曲线常用于评估分类器的准确性、鲁棒性和可靠性。

A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ⋅ ( y i + y i + 1 ) (2.20) \mathrm{AUC}=\frac{1}{2} \sum_{i=1}^{m-1}\left(x_{i+1}-x_i\right) \cdot\left(y_i+y_{i+1}\right) \tag{2.20} AUC=21i=1m1(xi+1xi)(yi+yi+1)(2.20)

AUC的取值范围在0.5到1之间,其中0.5表示随机分类器,而1表示完美分类器。在AUC为0.5到1之间的情况下,AUC值越大,分类器的性能越好。AUC曲线的斜率越大,分类器的性能也越好。

AUC曲线可以解决在不同阈值下分类器性能的变化问题,并且可以对不同的分类器进行比较。对于大多数实际问题,AUC都是一个有用的度量标准。

需要注意的是,AUC曲线并不适用于多类别分类问题,因为ROC曲线只适用于二元分类问题。在多类别分类问题中,可以使用一些其他的评估指标,例如混淆矩阵、准确率、召回率等。

以下是一个AUC曲线的例子:
在这里插入图片描述

这个例子展示了一个分类器的AUC曲线。曲线下方的面积(AUC)为0.87,表示该分类器的性能相对较好。在这个例子中,分类器的预测结果可以根据阈值进行分类,阈值从左上角到右下角逐渐增加。在最优阈值处,该分类器的真阳性率(TPR)为0.75,假阳性率(FPR)为0.15。

在实际应用中,AUC曲线可以用来选择最佳分类器和阈值,以最大化分类性能。由于AUC曲线不受分类器阈值的影响,因此它通常比其他评估指标更适合评估分类器的性能。

2.4 比较检验

1. 什么是比较验证

在机器学习中,比较验证是一种通过比较不同模型的性能来选择最佳模型的方法。比较验证通常涉及以下步骤:

  • 数据集划分:将数据集划分为训练集和测试集。通常使用交叉验证方法来确保模型在不同的数据集上进行训练和测试。

  • 模型训练:使用训练集训练不同的模型。

  • 模型评估:使用测试集评估模型的性能,并计算模型的指标,如准确率、召回率、F1分数、AUC等。

  • 模型比较:比较不同模型的性能指标,并选择最佳模型。

比较验证的目的是找到最佳的模型,以在未知数据上实现最佳性能。由于不同的模型在不同的数据集上表现可能不同,因此比较验证是一种重要的机器学习技术。通常,比较验证需要在多个数据集上进行,以避免因特定数据集导致的偏差。

比较验证可以使用多种方法,如留出法、交叉验证和自助法等。其中,交叉验证是最常用的方法之一,它可以有效地利用数据,并减少估计误差。交叉验证通常可以分为k折交叉验证、留一交叉验证等。

2. 假设验证

在机器学习中,假设验证是一种评估模型的泛化能力的方法,也称为模型选择。假设验证的基本思想是将数据集划分为训练集、验证集和测试集。模型在训练集上训练,在验证集上进行验证和参数调整,最终在测试集上进行测试。

假设验证通常涉及以下步骤:

  1. 数据集划分:将数据集划分为训练集、验证集和测试集。训练集用于模型训练,验证集用于模型选择和参数调整,测试集用于模型测试。

  2. 模型训练:使用训练集训练模型。

  3. 模型选择:使用验证集评估不同模型的性能,并选择最佳模型。

  4. 参数调整:使用验证集调整模型的参数。

  5. 模型测试:使用测试集评估最终模型的性能。

假设验证的目的是选择最佳模型,并避免过度拟合或欠拟合。过度拟合是指模型在训练数据上表现良好,但在测试数据上表现较差。欠拟合是指模型无法捕捉数据的复杂性,导致在训练和测试数据上都表现不佳。假设验证可以帮助选择最佳模型,以最大限度地提高模型的泛化性能。

假设验证可以使用多种方法,如留出法、交叉验证和自助法等。其中,交叉验证是最常用的方法之一,它可以有效地利用数据,并减少估计误差。交叉验证通常可以分为k折交叉验证、留一交叉验证等。

2.5 偏差与方差

1. 偏差与方差

在机器学习中,方差(Variance)和偏差(Bias)是模型的两个重要性质。它们通常被用来描述模型的复杂度和泛化性能。

偏差是指模型的预测结果与真实结果的平均差异,也称为模型的拟合能力。低偏差的模型通常具有较好的拟合能力,能够在训练数据上获得较好的性能。然而,当模型太简单时,它可能无法捕捉数据的复杂性,导致欠拟合。因此,适当的偏差通常需要保证模型具有一定的灵活性和能力,以提高其泛化性能。

方差是指模型在不同训练数据集上预测结果的差异,也称为模型的泛化能力。高方差的模型通常具有过拟合的倾向,即在训练数据上表现良好,但在测试数据上表现较差。过度复杂的模型通常容易过拟合,因为它们可以记忆训练数据中的噪声和异常值,而不是学习数据的真实模式。

为了平衡偏差和方差,可以使用正则化方法、交叉验证和集成学习等技术来调整模型的复杂度和参数。例如,正则化可以通过添加惩罚项来限制模型的复杂度,从而减少方差。交叉验证可以用于估计模型的泛化性能,并选择最佳模型。集成学习可以通过组合多个模型的预测结果来减少方差和偏差。

在这里插入图片描述

2. 泛化误差 / 偏差 / 方差 / 噪声

泛化误差可分解为偏差、方差与噪声之和。

E ( f ; D ) = bias ⁡ 2 ( x ) + var ⁡ ( x ) + ε 2 (2.42) E(f ; D)=\operatorname{bias}^2(\boldsymbol{x})+\operatorname{var}(\boldsymbol{x})+\varepsilon^2 \tag{2.42} E(f;D)=bias2(x)+var(x)+ε2(2.42)

Smileyan
2023.05.01 01:22


http://www.kler.cn/a/15711.html

相关文章:

  • LLMs 训练经验篇
  • 大三学生实习面试经历(1)
  • Python作业05
  • Qt 项目架构设计
  • 电子电气架构 --- 传统刷写流程怎么用在SOC上就不适用呢?
  • C++中特殊类设计/单例模式
  • 让你的ChatGPT更加强大——200+小白用来解锁ChatGPT高级功能的提示(Prompts)
  • C/C++的命名空间和调用函数的详细讲解
  • 【华为交换机配置命令大全】
  • 零售库存管理系统该如何选?这5款零售库存管理系统值得推荐!
  • 【C语言】#ifdef和#endif条件编译
  • pci总线协议学习笔记——PCI总线基本概念
  • 大数据好学么
  • Python学习10:计算三维空间某点距离原点的欧式距离(python123)
  • OSPF-MGRE综合实验
  • Microsoft Forms的應用(文行版)
  • 【VM服务管家】VM4.x算子SDK开发_3.3 模块工具类
  • 揭秘!我用AI写了一部精彩小说;搭建AI视频创作工作流;一键生成摘要工具清单;大模型创业生死5问 | ShowMeAI日报
  • 〔金融帝国实验室〕(Capitalism Lab)v9.0.00官方重大版本更新!
  • 如何保障网络安全
  • 【计算机网络】网络命令的使用
  • Mysql在大表中删除大量数据的优化
  • C++内存管理之拷贝memcpy、分配malloc 与释放free
  • 人工智能课程笔记(7)强化学习(基本概念 Q学习 深度强化学习 附有大量例题)
  • Ficus: 一款 markdown 编辑管理软件
  • 生成式AI火爆全球,你是否已经做好了准备?