模型评估与选择
1.经验误差与过拟合
通常我们把分类错误的样本数占样本总数的比例称为“错误率”(error rate),即如果在 m个样本中有a个样本分类错误,则错误率 E=a/m;相应的,1-a/m 称为“精度”(accuracy),即“精度= 1-错误率”.
当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降,这种现象在机器学习中称为“过拟合”(overftting).与“过拟合”相对的是“欠拟合”(underftting),这是指对训练样本的一般性质尚未学好.
2.评估方法
我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择.为此,需使用一个“测试集”(testing set)来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”(testing error)作为泛化误差的近似.通常我们假设测试样本也是从样本真实分布中独立同分布采样而得.但需注意的是,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过.
2.1.评估方法
方法 | 定义 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
留出法 (Holdout Method) | 将数据集分为训练集和测试集,通常比例为70%训练集和30%测试集。 | - 简单易实现 - 可以快速得到模型评估结果 |
- 可能会因为数据分布不均匀导致偏差 - 只有一次分割,可能不够稳健 |
- 数据量足够大 - 对数据分布有信心时 |
交叉验证法 (Cross-Validation) | 将数据集分为k个子集,每次留出一个子集作为测试集,其余作为训练集,重复k次并取平均值。 | - 可以利用所有数据进行训练和测试 - 减少过拟合的风险 |
- 计算成本较高 - 实现相对复杂 |
- 数据量较小 - 需要更稳健的模型评估时 |
自助法 (Bootstrapping) | 从原始数据集中有放回地随机抽取样本,重复多次形成多个训练集和测试集,计算模型的平均性能。 | - 可以处理小样本问题 - 适用于异常值较多的数据集 |
- 可能会因为样本重复导致方差增大 | - 数据量较小 - 需要评估模型在小样本上的表现时 |
2.2二分类模型的评价方法
2.2.1混淆矩阵的定义与应用
混淆矩阵(Confusion Matrix)是用于评估分类模型性能的一种工具,特别是在二分类问题中。它通过一个矩阵的形式展示了模型的预测结果与真实标签之间的关系。对于二分类问题,混淆矩阵通常包含四个主要的元素:
- 真正例(True Positive, TP):模型预测为正类且实际为正类的数量。
- 假正例(False Positive, FP):模型预测为正类但实际为负类的数量。
- 真负例(True Negative, TN):模型预测为负类且实际为负类的数量。
- 假负例(False Negative, FN):模型预测为负类但实际为正类的数量。
混淆矩阵的一般形式如下:
预测正类 | 预测负类 | |
---|---|---|
实际正类 | TP | FN |
实际负类 | FP | TN |
基于混淆矩阵,我们可以计算出多种评估模型性能的指标,包括但不限于:
-
准确率(Accuracy):模型预测正确的样本占总样本的比例。
[ \text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN} ] -
精确率(Precision):模型预测为正类且预测正确的样本占所有预测为正类的样本的比例。
[ \text{Precision} = \frac{TP}{TP + FP} ] -
召回率(Recall)或真正例率(True Positive Rate, TPR):模型预测为正类且预测正确的样本占所有实际为正类的样本的比例。
[ \text{Recall} = \frac{TP}{TP + FN} ] -
F1分数(F1 Score):精确率和召回率的调和平均数,用于衡量模型的整体性能。
[ \text{F1 Score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} ] -
特异性(Specificity)或真负例率(True Negative Rate, TNR):模型预测为负类且预测正确的样本占所有实际为负类的样本的比例。
[ \text{Specificity} = \frac{TN}{TN + FP} ]
混淆矩阵提供了一个直观的方式来理解模型在不同类别上的表现,以及模型可能存在的问题(例如,是否倾向于将正类误判为负类)。通过分析混淆矩阵,我们可以对模型的性能有一个全面的了解,并据此进行模型的优化和调整。
2.2.2ROC曲线
ROC曲线(Receiver Operating Characteristic Curve)是一种用于评估二分类模型性能的工具。它通过绘制不同阈值下模型的真正例率(True Positive Rate, TPR)和假正例率(False Positive Rate, FPR)来展示模型的识别能力。
ROC曲线的横轴是假正例率(False Positive Rate, FPR),纵轴是真正例率(True Positive Rate, TPR),其中:
- 真正例率(TPR):模型正确预测正类的比例,计算公式为 TPR = TP / (TP + FN)。
- 假正例率(FPR):模型错误预测正类的比例,计算公式为 FPR = FP / (FP + TN)。
ROC曲线的绘制步骤如下:
- 对模型输出的概率或得分进行排序,从高到低。
- 从最高得分开始,逐渐降低阈值,计算每个阈值下的TPR和FPR。
- 将计算得到的FPR和TPR值绘制在坐标图上,横轴为FPR,纵轴为TPR。
ROC曲线的特点:
- 曲线下的面积(AUC)越大,表示模型的分类性能越好。
- 完美的分类器的ROC曲线将从左上角开始,沿着横轴和纵轴向下到右下角结束。
- 如果模型的预测结果完全是随机的,那么ROC曲线将接近于45度的对角线。
ROC曲线的优点:
- 不依赖于特定的决策阈值。
- 可以比较不同分类器的性能。
- 可以展示模型在不同阈值下的性能变化。
- **真正例率(TPR)**:
TPR = TP / (TP + FN)
- **假正例率(FPR)**:
FPR = FP / (FP + TN)
ROC曲线的绘制:
1. 对模型输出的概率或得分进行排序。
2. 从最高得分开始,逐渐降低阈值,计算每个阈值下的TPR和FPR。
3. 将计算得到的FPR和TPR值绘制在坐标图上,横轴为FPR,纵轴为TPR。
通过ROC曲线,我们可以直观地了解模型在不同决策阈值下的性能,并选择一个合适的阈值来平衡真正例率和假正例率。
2.3调参
大多数学习算法都有些参数(parameter)需要设定,参数配置不同,学得模型的性能往往有显著差别.因此,在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,这就是通常所说的“参数调节”或简称“调参”(parameter tuning)
学习算法的很多参数是在实数范围内取值,因此,对每种参数配置都训练出模型来是不可行的.现实中常用的做法,是对每个参数选定一个范围和变化步长,例如在(0,0.2范围内以0.05 为步长,则实际要评估的候选参数值有5个,最终是从这5个候选值中产生选定值.显然,这样选定的参数值往往不是“最佳”值,但这是在计算开销和性能估计之间进行折中的结果,通过这个折中,学习过程才变得可行.事实上,即便在进行这样的折中后,调参往往仍很困难.可以简单估算一下:假定算法有3个参数,每个参数仅考虑5个候选值,这样对每一组训练/测试集就有53=125 个模型需考察:很多强大的学习算法有大量参数需设定,这将导致极大的调参工程量,以至于在不少应用任务中,参数调得好不好往往对最终模型性能有关键性影响.
3.偏差与方差
在机器学习中,偏差(Bias)和方差(Variance)是评估模型泛化能力的重要指标,它们描述了模型在训练数据和未知数据上的表现差异。
3.1偏差(Bias)
偏差指的是模型在训练数据上的表现与真实模型(或真实函数)之间的差异。偏差高的模型通常过于简单,无法捕捉数据中的复杂关系,导致模型在训练数据上的误差都很大。
- 高偏差:模型可能欠拟合(Underfitting),即模型太简单,无法捕捉数据的基本结构。这种情况下,模型在训练集上的误差很高,因为它无法学习到数据中的模式。
- 低偏差:模型能够较好地捕捉数据中的模式,但可能不会过于复杂。
3.2方差(Variance)
方差指的是模型在不同训练数据集上训练时,其性能的变化程度。方差高的模型对训练数据中的噪声和随机波动非常敏感,导致模型在不同训练集上的性能波动很大。
- 高方差:模型可能过拟合(Overfitting),即模型过于复杂,学习到了数据中的噪声和细节,而不是底层的模式。这种情况下,模型在训练集上的误差可能很低,但在测试集上的误差很高。
- 低方差:模型对训练数据的变化不敏感,能够保持稳定的性能。
3.3偏差与方差的关系
偏差和方差之间存在权衡关系(Bias-Variance Tradeoff):
- 当模型的偏差增加时,方差通常会减少,因为模型变得更简单,对训练数据的变化不敏感。
- 当模型的方差增加时,偏差通常会减少,因为模型变得更复杂,能够捕捉更多的数据细节。
理想的模型应该在偏差和方差之间找到一个平衡点,即能够捕捉数据中的模式,同时对训练数据的变化不敏感。这种平衡可以通过调整模型的复杂度、增加或减少训练数据、正则化等方法来实现。