交叉验证
交叉验证作为一种统计学方法,既可以用于调整超参数,也可以用于评估模型的泛化能力,这两个应用虽然相关,但侧重点不同。
超参数调整
在调整超参数时,交叉验证用于比较不同超参数设置下模型的性能。通过在训练集的不同子集上训练并在验证集上评估模型,可以确定哪一组超参数能够带来最佳的模型性能。这个过程通常涉及到:
- 定义超参数空间:确定需要调整的超参数以及它们可能的取值范围。
- 选择交叉验证策略:最常用的是K折交叉验证。
- 性能评估:对每一组超参数,使用交叉验证来评估模型性能。这通常涉及到对每一折的数据进行训练和验证,并计算验证结果的平均值。
- 选择最佳超参数:基于交叉验证结果,选择表现最好的超参数设置。
模型评估
在模型评估阶段,交叉验证用于估计模型在独立数据集上的表现。这是通过将数据集分成多个部分,然后在这些部分上重复训练和测试模型来实现的。每一部分都有机会作为测试集,从而使评估结果更加可靠和全面。这个过程可以揭示模型的泛化能力,即模型对未知数据的处理能力。
使用交叉验证进行模型评估时,通常遵循以下步骤:
- 选择交叉验证策略:例如K折交叉验证。
- 执行交叉验证:对每一折(或"轮"),训练模型,并在保留的测试折上评估其性能。
- 计算平均性能指标:通常对所有折的性能指标(如准确率、召回率、F1分数等)计算平均值,以得到模型性能的整体估计。
综合应用
在实践中,交叉验证通常先用于超参数调整,确定最佳的超参数设置后,再使用这些超参数在整个训练数据集上训练模型。然后,可以再次使用交叉验证(或保留一部分数据作为最终测试集)来评估这个最终模型的泛化能力。
分类问题
准确率 (Accuracy) 精确率 (Precision) 召回率 (Recall) F1 score 等
一文看懂机器学习指标:准确率、精准率、召回率、F1、ROC曲线、AUC曲线
B站
(模型)准确率 Accuracy:所有正确预测分类的数据 / 所有数据(总体预测对的)
精确率 Precision:模型预测正确的正样本 / 所有模型预测为正的样本(模型的精确度)
召回率 Recall:预测正确的正样本 / 测试集中所有正样本数(单类预测对的)
三者分子都是预测正确的
用于多分类的时候,将自己看作一类,其余的看作另一类
F1分数
几何平均:
算数平均:
调和平均:
F1分数使用调和平均,调和平均给予较小的值更多的权重(取倒数)使得精确率和召回率能更好的平衡,否则若使用算数平均,较大的值对整体影响较大,无法起到调和的作用
ROC 曲线越陡(左上角区域即接近(0,1)点),模型的性能就越好
AUC:ROC 曲线下的面积,越接近 1 效果越好
混淆矩阵 Confusion Matrix
B站入门讲解
sklearn中混淆矩阵(confusion_matrix函数)的理解与使用
运行博客二中的代码:
from sklearn.metrics import confusion_matrix
y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
confusion_matrix(y_true, y_pred, labels=["ant", "bird", "cat"])
array([[2, 0, 0],
[0, 0, 1],
[1, 0, 2]], dtype=int64)
labels表示,行,列的标签顺序为["ant", "bird", "cat"]。通过观察对角线(预测正确的次数),第一个数据是ant被预测为ant的次数,为2次,bird被预测为bird的次数为0次,cat被预测为cat的次数为2次.
debug
ValueError: At least one label specified must be in y_true
问答
Q:
1. 基本定义
- 请解释准确率(Accuracy)的定义及其计算方式。
- 请定义召回率(Recall)并说明其在何种情况下尤为重要。
- 描述精确度(Precision)的含义,并提供一个实际应用场景,其中精确度比其他指标更重要。
- 解释F1得分是如何平衡精确度和召回率的,以及为什么要使用F1得分而不是直接使用精确度或召回率。
2. 计算和应用
- 给定一个混淆矩阵,如何计算准确率、召回率、精确度和F1得分?
- 在一个极度不平衡的数据集中,为什么仅使用准确率来评估模型可能会产生误导?
- 请举例说明在哪种情况下你会优先考虑召回率而不是精确度,反之亦然。
3. 理论和实践
- 在二分类问题中,如果类别极不平衡,应该使用哪些性能指标?为什么?
- 请解释为什么F1得分可能不足以全面评估模型的性能。
- 在多分类问题中,如何计算和解释这些评估指标?
- 如何提高召回率/精确率?
4. 批判性思维
- 有哪些情况下准确率高但模型性能实际上并不好?请提供一个实例。
- 如果你的模型在精确度很高的情况下召回率很低,你会如何调整模型以改善性能?
- 考虑到业务成本和利益,如何决定在精确度和召回率之间的权衡?
A:
1. 基本定义
准确率(Accuracy)的定义及计算方式
准确率是正确预测的数量(真正例和真反例)与总预测数量的比率。它是最直观的性能评估指标,但在数据不平衡的情况下可能会产生误导。
召回率(Recall)的定义及其重要性
召回率是正确预测为正例的数量(真正例)与实际正例总数的比率。召回率在需要捕捉尽可能多的正例(如疾病筛查)时非常重要,因为它关注于遗漏正例的数量。
精确度(Precision)的含义及重要应用场景
精确度是正确预测为正例的数量(真正例)与所有预测为正例的数量的比率。在将误报的成本很高的场景中,精确度尤其重要,例如垃圾邮件检测,你不希望误将重要邮件归类为垃圾邮件。
F1得分的解释
F1得分是精确度和召回率的调和平均值,用于平衡两者。当你需要同时考虑精确度和召回率,且无法确定哪个更重要时,F1得分是一个有用的指标。
2. 计算和应用
给定混淆矩阵的计算
给定一个混淆矩阵,你可以直接应用上述公式来计算准确率、召回率、精确度和F1得分。
不平衡数据集中准确率的误导性
在极度不平衡的数据集中,即使模型仅预测多数类,准确率也可能很高。这会掩盖模型在少数类上表现不佳的事实,因此在这种情况下,准确率不是一个好的性能指标。
优先考虑召回率或精确度的情况
- 在医疗诊断等领域,错过真正的病例(低召回率)可能比误诊(低精确度)更危险,因此可能会优先考虑召回率。
- 在垃圾邮件检测等场景中,误报(低精确度)可能导致重要信息的丢失,因此可能会优先考虑精确度。
3. 理论和实践
类别极不平衡的二分类问题的性能指标
在类别极度不平衡的情况下,应使用召回率、精确度和F1得分而非准确率,因为它们能更好地反映模型在少数类上的性能。
F1得分可能不足以全面评估模型性能的原因
F1得分是精确度和召回率的调和平均,它倾向于同时考虑这两个指标。然而,在某些情况下,这种平衡可能掩盖了模型在这两个方面的极端表现。例如,一个模型可能具有很高的精确度但很低的召回率,或者相反,这在F1得分中可能不会很明显。此外,F1得分不能提供关于模型在不同阈值下表现的信息,这在某些应用中可能非常关键。
多分类问题中的评估指标计算和解释
在多分类问题中,可以分别为每个类计算精确度、召回率和F1得分,然后通过宏平均(对所有类的指标求平均)或微平均(先汇总所有类的TP、FP、FN,然后计算指标)来获得整体性能指标。宏平均对所有类别平等对待,而微平均更多地受到高频类别的影响。
提高召回率/精确率
精确率低(FP较高)和召回率低(FN较高)可能原因:
样本不均衡、特征学习不足、模型不匹配(模型太简单,欠拟合,或太复杂,过拟合)、超参数设置(如学习率过高或过低、正则化不当等)、数据质量或预处理不当
解决方法:
a. 增加正样本,数据重采样
b. 使用加权交叉熵损失,为少数类分配更高的权重
c. 数据标注错误,正样本被标注为负样本
4. 批判性思维
准确率高但模型性能不好的情况
在数据高度不平衡的情况下,即使模型对多数类的预测非常准确,但对少数类几乎总是错误的,准确率也可能会很高。这种情况下,模型实际上对于识别少数类(可能是更感兴趣的类)的能力很差。
精确度高但召回率低的模型调整策略
如果模型的精确度很高但召回率很低,这意味着模型过于保守,只有在非常确定的情况下才会预测正类。调整策略可能包括:
- 降低分类阈值,使模型更容易将实例分类为正类。
- 重新采样或加权以增加少数类的影响,使模型更关注于少数类。
- 在损失函数中引入类权重,提高少数类的错误成本。
在精确度和召回率之间的权衡
权衡精确度和召回率通常涉及业务或应用需求的具体分析。在某些情况下,避免假阳性(高精确度)可能比避免假阴性(高召回率)更重要,反之亦然。考虑成本、风险和可能的后果是决定这种权衡的关键。例如,在金融欺诈检测中,可能更愿意接受较低的精确度以保证较高的召回率,以确保尽可能多的欺诈案例被捕获,即使这意味着更多的正常交易会被错误地标记为欺诈。
回归问题
-
均方误差(Mean Squared Error, MSE):
- MSE是实际值与预测值之差的平方和的平均值(方差),是衡量预测准确性的常用指标。
-
均方根误差(Root Mean Squared Error, RMSE):
- RMSE是MSE的平方根(标准差),用于量化预测误差的大小。
-
平均绝对误差(Mean Absolute Error, MAE):
- MAE 是实际值与预测值之差的绝对值的平均值,它给所有的误差以相等的权重。
-
R平方(R²或决定系数):
- R平方衡量模型解释的变异量占总变异量的比例,值越接近1表示模型越好。
聚类问题的评分指标
-
轮廓系数(Silhouette Coefficient)
- 轮廓系数结合了聚类的凝聚度和分离度,用于评估聚类的质量,其值的范围是[-1, 1]。
-
戴维森堡丁指数(Davies-Bouldin Index)
- 该指数是一种内部评估方法,通过计算聚类之间的相似度来评估聚类质量,值越小表示聚类效果越好。
-
Jaccard系数
用于分类和聚类问题
计算两个集合 A、B 的相似度,A∩B/A∪B,若交比并越大则代表AB越相似,即Jaccard系数越大相似度越大
聚类分配:数据点根据聚类算法被分配到的聚类(集合A)
真实分组:数据点根据实际情况或先验知识应该被分配到的组(集合B)
系数越接近 1,代表聚类效果越好
距离相似度计算总结(欧式距离、余弦相似度、杰卡德、互信息等18种)