周志华老师的《机器学习》笔记
经验误差和过拟合:
在机器学习中,经验误差(Empirical Error)指的是模型在训练集上的误差,即模型对训练集中样本的预测误差。通常使用损失函数来衡量经验误差,例如在分类问题中可以使用交叉熵损失函数,回归问题中可以使用均方误差损失函数。经验误差可以帮助评估模型在训练集上的拟合程度,但不能直接反映模型在未见数据上的泛化能力。
过拟合(Overfitting)指的是模型在训练集上表现很好,但在测试集(或其他未见数据)上表现较差的现象。过拟合通常是因为模型过于复杂,试图捕捉训练数据中的噪声或细节,而不是真正的模式或规律。过拟合可以通过减小模型复杂度、增加训练数据量、正则化等方法来缓解。
欠拟合:
欠拟合(Underfitting)指的是模型在训练集和测试集上表现都不佳的情况,通常是因为模型过于简单,无法捕捉数据中的真实模式或规律所导致的。要克服欠拟合,可以考虑以下方法:
-
增加模型复杂度:尝试使用更复杂的模型,例如增加神经网络的层数或节点数,增加决策树的深度等,以提高模型的表达能力。
-
特征工程:通过添加更多的特征或对现有特征进行变换,使模型能够更好地捕捉数据中的模式。
-
减小正则化参数:如果模型使用了正则化(例如L1正则化、L2正则化),可以尝试减小正则化参数的值,以降低对模型复杂度的惩罚,从而提高模型的拟合能力。
-
增加训练数据量:增加训练数据量可以帮助模型更好地学习数据中的模式,从而减少欠拟合现象。
-
模型集成:尝试使用模型集成的方法,例如bagging、boosting等,将多个模型的预测结果进行组合,以提高模型的泛化能力。
-
调整超参数:对模型的超参数进行调整,例如学习率、批量大小等,以找到最优的超参数组合。
评估方法
为什么要对算法进行泛化评估:
-
避免过拟合和欠拟合:泛化评估可以帮助检测模型是否出现过拟合或欠拟合的问题。如果模型在训练集上表现很好但在测试集上表现很差,就可能是过拟合问题;如果模型在训练集和测试集上都表现很差,就可能是欠拟合问题。
-
评估模型性能:泛化评估可以帮助评估模型在真实场景中的表现,而不仅仅是在训练数据上的表现。这对于选择最优模型和优化算法非常重要。
-
验证模型效果:在实际应用中,我们通常只能获得有限数量的数据用于训练和测试,因此泛化评估可以帮助验证模型在现实场景中的效果。
测试数据集选择的注意事项:
-
代表性:测试数据集应该代表了模型将来可能会遇到的数据分布。如果测试数据不够代表性,模型在实际应用中的性能可能会大打折扣。
-
独立性:测试数据集应该与训练数据集相互独立,即测试数据中的样本不应该在训练过程中出现过。否则,模型可能会过度拟合训练数据,而无法泛化到新数据。
-
数据量:测试数据集的大小应该足够大,以能够对模型进行充分的评估。通常建议将数据集分为训练集、验证集和测试集,其中测试集的大小应该占总数据的20%到30%。
留出法及使用注意事项:
留出法(Holdout Method)是最简单和最常用的数据集划分方法之一,用于将数据集分为训练集和测试集。在留出法中,将数据集按照一定比例划分为两部分,一部分用于训练模型,另一部分用于评估模型性能。
在使用留出法分割训练和测试数据集时,需要注意以下几点:
-
数据分布:确保训练集和测试集的数据分布应该与整个数据集的分布相似,以保证模型在测试集上的表现能够代表模型在真实场景中的表现。
-
随机性:在划分数据集时,应该考虑使用随机抽样的方式,以避免由于数据顺序造成的偏差。可以多次随机划分数据集,取平均值作为最终评估结果。
-
数据量:确保训练集和测试集的数据量足够大,以能够充分评估模型的性能。通常建议将数据集划分为训练集和测试集的比例为 7:3 或 8:2。
-
数据分布不平衡:如果数据集存在类别不平衡的情况,应该确保训练集和测试集中各个类别的样本比例相似,以避免模型在测试集上表现不准确。
交叉验证法:
交叉验证是一种常用的模型评估方法,用于评估模型的性能和泛化能力。其中,十折交叉验证和留一法是两种常见的交叉验证方法。
-
交叉验证方法:交叉验证将数据集分为训练集和测试集两部分,多次重复进行模型训练和评估。最常见的交叉验证方法是k折交叉验证,将数据集分为k个子集,每次使用其中一个子集作为测试集,其余k-1个子集作为训练集,重复k次,每次都选择一个不同的子集作为测试集。最终将k次评估结果的平均值作为最终评估结果。
-
十折交叉验证方法:十折交叉验证是k折交叉验证中的一种特殊情况,其中k=10。数据集被分为10个子集,每次使用其中一个子集作为测试集,其余9个子集作为训练集,重复10次。最终将10次评估结果的平均值作为最终评估结果。
-
留一法:留一法是一种特殊的交叉验证方法,其中每个样本都被单独作为测试集,其余样本作为训练集。这意味着对于包含n个样本的数据集,留一法将会进行n次模型训练和评估。最终将n次评估结果的平均值作为最终评估结果。
自助法(包外估计)
在自助法中,通过对原始数据集进行有放回抽样,生成一个新的样本集,新样本集的大小与原始数据集相同。这个过程重复多次,生成多个自助样本集,然后可以利用这些样本集来进行统计量的估计或者模型的训练和评估。
自助法被称为“包外估计”(Out-of-Bag Estimation)的原因是,在进行自助抽样时,约有36.8%的样本不会被抽到,这部分样本被称为“包外样本”(Out-of-Bag Samples)。对于每个样本来说,它被抽到的概率是1-1/n,未被抽到的概率是1/n,那么当重复采样n次时,该样本不被抽到的概率是(1-1/n)^n,当n趋近于无穷大时,这个概率趋近于1/e=0.368。因此,大约有36.8%的样本不会被抽到,这些样本可以用来作为模型的验证集,用于评估模型的性能。
自助法的优点包括:
-
简单易实现:自助法不需要对原始数据集进行复杂的处理,只需要进行有放回抽样即可。
-
充分利用数据:由于自助法生成的样本集中有约36.8%的样本是包外样本,因此可以充分利用数据进行模型的评估和优化。
-
可靠的估计:由于每个样本在多个自助样本集中都有出现,因此可以利用多次估计结果的平均值来得到更可靠的估计。
自助法的缺点包括:
-
自助样本集的大小与原始数据集相同,因此在数据集较大时,需要进行大量的重复抽样,计算成本较高。
-
自助法生成的样本集中包含了一部分重复样本,这可能会导致模型在训练时对某些样本过于依赖,从而影响模型的泛化能力。
调参与最终模型
-
参数调节:大多数学习算法都有一些参数需要设置,这些参数的配置会影响最终模型的性能。调参是指在训练过程中调整这些参数,以找到最优的参数配置。由于参数通常是在实数范围内取值,因此不可能对所有可能的参数值进行尝试,而是选择一组候选参数值进行评估。
-
候选值:指用于调节模型参数的一组可能取值。具体来说,对于每个参数,可以选择一个范围和变化步长,然后在这个范围内以步长为间隔选取候选值。例如,在 [0, 0.2] 范围内以 0.05 为步长,则实际要评估的候选参数值有 5 个,分别为 0, 0.05, 0.1, 0.15, 0.2。这些候选值将用于训练多个模型,最终选择性能最好的模型。
-
模型选择:在进行模型评估时,通常会将数据集划分为训练集和验证集。训练集用于训练模型,而验证集用于评估模型的性能。通过在验证集上评估不同参数配置的模型,可以选择最优的模型。
-
最终模型:在模型选择完成后,使用所有的训练数据重新训练最终模型。最终模型使用了所有的训练数据,因此在训练过程中可以更好地拟合数据,从而提高模型的性能。
-
验证集:在模型评估与选择过程中,用于评估不同参数配置的模型的数据集通常称为验证集。验证集在实际使用中不会被模型见到,因此可以用来估计模型在未见数据上的泛化能力。
性能度量
在机器学习中,性能度量(Performance Metric)是用来评估模型预测结果的好坏程度的指标。性能度量通常用于衡量模型在处理数据集上的表现,以便比较不同模型或不同参数设置下的模型。常用的性能度量包括但不限于以下几种:
-
准确率(Accuracy):准确率是分类问题中最常用的性能度量之一,表示模型正确预测的样本数占总样本数的比例。准确率越高,模型的性能越好。
- 查准率(Precision):指模型预测为正类别并且预测正确的样本数占预测为正类别的样本数的比例。换句话说,它衡量了模型在预测为正类别时的准确性。
其中,TP(True Positive)表示真正类别被正确预测的样本数,FP(False Positive)表示负类别被错误预测为正类别的样本数。 - 查全率(Recall):指模型正确预测为正类别的样本数占真实正类别的样本数的比例。换句话说,它衡量了模型能够找出正类别样本的能力。
其中,FN(False Negative)表示正类别被错误预测为负类别的样本数。
查准率和查全率之间存在一种权衡关系:提高查准率可能会降低查全率,反之亦然。因此,在实际应用中,需要根据具体的任务需求来选择更合适的指标。 -
F1分数(F1 Score):F1分数是查准率和查全率的调和平均数,综合考虑了模型的查准率和查全率。
-
均方误差(Mean Squared Error,MSE):均方误差是回归问题中常用的性能度量,表示模型预测值与真实值之间的平均平方差。均方误差越小,模型的性能越好。
-
对数损失(Log Loss):对数损失是用于衡量分类问题中概率预测的一种度量,表示模型预测概率与真实标签之间的负对数似然。
查准率和查全率曲线:
查准率和查全率曲线(Precision-Recall Curve)是用于评估分类模型性能的一种图形化指标。该曲线显示了在不同阈值下,分类器的查准率和查全率之间的权衡关系。
在绘制查准率和查全率曲线时,首先需要将分类器对每个样本的预测概率按照从高到低的顺序排列。然后,从最高概率开始逐个降低阈值,每次将高于该阈值的样本预测为正类别,低于该阈值的样本预测为负类别。对于每个阈值,可以计算出相应的查准率和查全率,然后将这些点连接起来形成曲线。
查准率和查全率曲线可以帮助我们了解在不同阈值下模型的表现情况。一般来说,曲线越靠近右上角(查准率和查全率都很高),表示模型性能越好。曲线下面积(Area Under the Precision-Recall Curve,AUC-PR)也是评估模型性能的重要指标,AUC-PR越接近1,模型性能越好。
平衡点:
平衡点(Break-even Point)是指在查准率-查全率曲线上,查准率等于查全率的那个点的位置。换句话说,平衡点是指在不同阈值下,分类器在查准率和查全率之间取得平衡的阈值点。
在平衡点处,模型既考虑到了查准率(预测为正类别的样本中实际为正类别的比例),也考虑到了查全率(真实的正类别样本中被预测为正类别的比例)。
宏查准率(Macro Precision)和宏查全率(Macro Recall):
宏查准率是所有类别的查准率的平均值,宏查全率是所有类别的查全率的平均值。计算公式如下:
微查准率(Micro Precision)和微查全率(Micro Recall):
微查准率是所有类别的真正例数除以所有类别的真正例和假正例数的总和,微查全率是所有类别的真正例数除以所有类别的真正例和假负例数的总和。计算公式如下:
其中,N是类别数,、
和
分别是第i个类别的真正例、假正例和假负例数量。
ROC与AUC
ROC(Receiver Operating Characteristic)曲线是一种用于评估二分类模型性能的工具。ROC曲线以假正例率(False Positive Rate,FPR)为横坐标,真正例率(True Positive Rate,TPR)为纵坐标,通过绘制不同阈值下的FPR和TPR得到。其中,FPR表示实际为负样本但被预测为正样本的比例,TPR表示实际为正样本且被预测为正样本的比例。
AUC(Area Under the Curve)是ROC曲线下方的面积,用于衡量模型的性能。AUC的取值范围在0.5到1之间,AUC越接近1,模型的性能越好。当AUC等于0.5时,表示模型的预测效果等同于随机预测。
代价敏感错误率
非均等代价
在机器学习中,非均等代价(Unequal Cost)是指不同类别的错误分类所带来的代价不同。在实际应用中,不同类别的错误可能会导致不同的后果,因此需要根据具体情况对不同类别的错误分类进行不同程度的惩罚或衡量。
代价矩阵
代价矩阵(Cost Matrix)是描述不同类别之间代价关系的一种形式。代价矩阵是一个N×N的矩阵,其中N表示类别的数量。矩阵的第i行第j列元素表示将第j类样本误分类为第i类的代价。通常情况下,对角线上的元素表示将第i类正确分类的代价(通常为0),而其他元素表示将其他类别误分类为第i类的代价。
总体代价
在机器学习中,“总体代价”(Overall Cost)指的是模型在整个数据集上的错误分类所带来的总代价。总体代价通常是根据每种错误分类的代价和错误分类的频率计算得出的。在实际问题中,不同类别的错误分类可能会带来不同的代价,因此追求总体代价最小化可以帮助我们找到一个更好的模型,以降低错误分类所带来的总代价。
代价敏感错误率(Cost-sensitive Error Rate)是指在考虑了不同类别错误分类代价的情况下,计算模型的错误率。与传统的错误率不同,代价敏感错误率考虑了不同类别错误分类的代价差异,因此更能反映模型在实际应用中的性能。
通过追求总体代价最小化,我们可以更好地权衡不同类别错误分类的代价,并且更加符合实际应用中对模型性能的需求。
多分类任务的代价敏感性能度量
在多分类任务中,代价敏感性能度量通常基于混淆矩阵(Confusion Matrix)来计算,考虑了不同类别的错误分类代价。
一种常见的多分类代价敏感性能度量是代价敏感错误率(Cost-sensitive Error Rate)。在代价敏感错误率中,我们为每个类别定义了不同的错误分类代价,并计算模型在考虑这些代价后的错误率。具体计算方式如下:
假设共有N个类别,代价矩阵为C,其中C(i,j)表示将真实类别为i的样本预测为类别j的代价。对于混淆矩阵中的第i行第j列元素表示真实类别为i但被预测为类别j的样本数量,可以计算出代价敏感错误率为:
代价敏感错误率考虑了不同类别错误分类的代价,因此可以更好地评估模型在实际应用中的性能。
代价曲线
在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,因为ROC曲线只考虑了不同阈值下的真正例率(TPR)和假正例率(FPR),并未考虑到不同类别错误分类的代价差异。为了更好地评估模型在非均等代价下的性能,可以使用代价曲线(cost curve)。
代价曲线的横轴是取值为[0,1]的正例概率代价,代表在不同阈值下将样本预测为正例的代价。纵轴是取值为[0,1]的归一化代价,代表在不同阈值下的归一化代价。
代价曲线的绘制方法如下:对于ROC曲线上的每个点(TPR,FPR),可以计算出相应的假反例率(FNR);然后在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,线段下的面积即表示该条件下的期望总体代价。通过将ROC曲线上的每个点转化为代价平面上的一条线段,并取所有线段的下界,可以围成的面积表示在所有条件下学习器的期望总体代价。