机器学习模型评估指标总结
- 格式:docx
- 大小:396.38 KB
- 文档页数:11
如何评估机器学习模型的性能与准确度机器学习模型的性能和准确度评估是确定其预测能力和可靠性的重要步骤。
在实际应用中,我们需要对模型进行严格的评估,以确保其在不同数据集上的稳定表现。
本文将介绍一些常用的评估指标和方法,以帮助读者全面了解机器学习模型的性能和准确度评估。
一、评估指标在评估机器学习模型性能和准确度时,常用的评估指标包括精确度(accuracy)、召回率(recall)、F1分数(F1-score)、ROC曲线和AUC值等。
1. 精确度(Accuracy)精确度是最常用的评估指标,用于衡量分类模型正确预测的样本所占的比例。
精确度计算公式如下:精确度 = 预测正确的样本数 / 总样本数2. 召回率(Recall)召回率衡量了模型正确识别为正类别的样本所占的比例。
召回率计算公式如下:召回率 = 正确预测为正类别的样本数 / 实际为正类别的样本数3. F1分数(F1-score)F1分数是精确度和召回率的综合评估指标,用于平衡二者之间的关系。
F1分数的计算公式如下:F1分数 = 2 * (精确度 * 召回率) / (精确度 + 召回率)4. ROC曲线和AUC值ROC曲线是一种用于评估二分类模型性能的图形化工具。
它以真正类率(True Positive Rate,也称为召回率)为纵轴,假正类率(False Positive Rate)为横轴,通过调整分类阈值来绘制曲线。
AUC(Area Under Curve)是ROC曲线下的面积,用于量化模型性能。
AUC值越接近1,说明模型性能越好。
二、评估方法为了准确评估机器学习模型的性能和准确度,我们需要注意以下几个评估方法。
1. 留出法(Holdout)留出法是最简单的评估方法,它将数据集划分为训练集和测试集两部分。
通常,我们将70%~80%的数据用于训练模型,剩余的20%~30%用于评估模型的性能和准确度。
2. 交叉验证法(Cross Validation)交叉验证法可以更好地利用数据集来评估模型性能。
机器学习模型评估指标机器学习是一种应用于计算机系统的人工智能技术,能够使计算机系统通过自动学习和改进来进行数据分析、模式识别和决策预测。
在机器学习过程中,评估模型的性能和效果是非常重要的。
本文将介绍几种常见的机器学习模型评估指标。
一、准确率(Accuracy)准确率是最直观和常见的机器学习模型评估指标之一。
它是指模型正确分类的样本数量与总样本数量之间的比率。
准确率越高,模型的性能越好。
然而,准确率并不能反映出模型在不同类别上的表现,当数据集存在类别不平衡的情况时,准确率可能会失真。
二、精确率(Precision)和召回率(Recall)精确率和召回率是常用于评估二分类模型的指标。
精确率指的是模型在预测为正例的样本中,真实为正例的比例。
召回率指的是模型能够正确预测为正例的样本数量与真实正例的数量之间的比例。
精确率和召回率之间存在一种权衡关系,提高其中一个指标可能会导致另一个指标的下降。
三、F1分数(F1 Score)F1分数是综合考虑精确率和召回率的指标。
它是精确率和召回率的调和平均值,可以反映模型在同时考虑到预测准确性和覆盖率时的整体性能。
四、ROC曲线和AUC(Area Under Curve)ROC曲线是一种绘制真正例率和假正例率之间关系的图形。
真正例率指的是模型能够正确预测为正例的样本数量与总真实正例数量之间的比例。
假正例率指的是模型将负例样本错误分类为正例的比例。
AUC是ROC曲线下的面积,用来衡量模型分类器的能力。
AUC值越接近1,模型性能越好。
五、平均精度均值(Average Precision)平均精度均值是一种广泛用于信息检索系统中的评估指标。
它能够衡量模型在不同召回率下的精确率表现。
通过计算不同召回率下精确率的平均值,可以得到模型的平均精度均值。
六、对数损失(Log Loss)对数损失是一种常用的度量分类器预测概率分布的指标。
它将模型对每个样本的预测概率与真实标签之间的差异加权求和。
机器学习模型评估在机器学习领域,模型评估是一个至关重要的任务。
它用于确定训练出的机器学习模型在新数据上的表现和准确性。
在本文中,我们将探讨机器学习模型评估的不同方法和技术。
一、介绍机器学习模型评估是指通过使用一系列评估指标来评估机器学习算法的性能。
这些指标可以提供关于模型的准确性、鲁棒性和泛化能力的信息。
模型评估的目标是帮助我们了解模型在实际应用中的表现,并选择适合特定任务的最佳模型。
二、常见的评估指标1. 准确率(Accuracy):准确率是最常用的评估指标之一。
它表示模型在测试数据集中正确分类的样本数量占总样本数量的比例。
2. 精确率(Precision):精确率是用于二分类问题的评估指标。
它定义了分类为正类的样本中实际为正类的比例。
3. 召回率(Recall):召回率也被称为敏感性。
它定义了在所有实际为正类的样本中,分类器正确识别为正类的比例。
4. F1值(F1-Score):F1值是精确率和召回率的调和均值。
它综合考虑了模型的精确性和完整性。
5. ROC曲线:ROC曲线是用于评估二分类模型的曲线。
它显示了不同阈值下真阳性率和假阳性率之间的关系。
三、交叉验证为了更准确地评估机器学习模型的性能,我们通常需要使用交叉验证技术。
交叉验证将数据集划分为多个子集,然后使用一个子集作为测试集,其余子集作为训练集。
这样可以有效地利用数据,并减小因数据集划分而引入的偏差。
四、模型选择和调整在评估模型时,我们还需要考虑模型的选择和调整。
模型的选择涉及选择适合特定任务的模型类型,例如决策树、支持向量机等。
模型的调整则包括选择合适的超参数,如学习率、正则化参数等。
五、模型集成模型集成是通过结合多个不同的模型以提高预测性能的技术。
常见的模型集成方法包括投票法、权重法和堆叠法等。
六、评估模型时的注意事项在评估模型时,我们需要注意以下几点:1. 数据预处理:对数据进行预处理是评估模型之前的必要步骤。
它可以包括数据清洗、特征选择、特征缩放等操作。
模型精确度衡量指标选择方法总结在机器学习和数据分析领域中,模型的精确度衡量指标是评估模型性能和效果的重要依据。
选择合适的指标能够更好地评估模型,帮助研究人员和从业者做出更准确的决策。
本文将总结几种常用的模型精确度衡量指标选择方法,包括准确率、召回率、F1值、ROC曲线和AUC等。
1. 准确率(Accuracy)准确率是最直观和普遍使用的模型精确度衡量指标。
它衡量的是模型在所有样本中预测正确的比例。
准确率可以简单地计算为预测正确的样本数除以总样本数。
准确率适用于分类任务,并且对各个类别的预测结果平等对待。
然而,当数据集存在类别不平衡问题时,准确率可能会产生误导性的结果。
例如,当一个数据集中正样本占总样本数的比例很小时,一个简单的分类器可以通过将所有样本预测为负样本而达到高准确率。
因此,在类别不平衡的情况下,准确率并不能准确地反映模型的性能。
2. 召回率(Recall)召回率也被称为灵敏度(Sensitivity)或真阳率(True Positive Rate)。
它衡量的是模型对正类样本的检测能力。
召回率可以简单地计算为模型正确预测的正样本数除以真实存在的正样本数。
召回率非常适用于那些对于正类样本预测更为关注的场景,如疾病检测。
在疾病检测中,为了确保尽可能少地漏掉患病者,我们更关注于高召回率的模型。
然而,高召回率可能会导致误报增多,因此需要根据具体场景权衡衡量召回率和其他指标。
3. F1值F1值是综合考虑了准确率和召回率的模型精确度衡量指标。
它是准确率和召回率的调和平均值,可以通过以下公式计算:F1 = 2 * (precision * recall) / (precision + recall)其中,precision表示精确率,计算方式是预测正确的正样本数除以预测为正样本的样本数。
F1值能够平衡准确率和召回率之间的权衡关系。
当模型既能够捕获大部分正样本又能够尽量减少误报时,F1值会较高。
4. ROC曲线和AUCROC曲线(Receiver Operating Characteristic Curve)和AUC(AreaUnder Curve)常用于评估二分类模型的性能。
机器学习中的模型评估指标介绍与比较在机器学习中,模型评估是评估模型性能和预测能力的重要步骤。
模型评估指标是根据模型的输出对其性能进行度量和比较的一组指标。
在实际应用中,选择合适的评估指标对于决策和性能提升至关重要。
本文将介绍常用的机器学习模型评估指标,并进行比较和分析。
1.准确率(Accuracy)准确率是最简单直观的评估指标之一,定义为模型预测正确的样本数与总样本数的比值。
准确率越高,模型的性能越好。
然而,准确率不能很好地应对样本类别不平衡的情况。
当一个类别的样本数量远远大于其他类别时,模型会倾向于预测较多样本的类别,导致准确率的失真。
2.精确率(Precision)和召回率(Recall)精确率和召回率是一对相互补充的指标。
精确率表示被分类器正确分类为某一类别的样本数量与所有被分类为该类别的样本数量的比值。
召回率表示被正确分类为某一类别的样本数量与该类别所有样本数量的比值。
精确率和召回率越高,模型的性能越好。
3. F1分数F1分数是精确率和召回率的调和平均值,表示了模型的综合性能。
F1分数越高,说明模型的性能越好。
当样本类别不平衡时,F1分数能更好地衡量模型的性能。
4. ROC曲线和AUC值ROC曲线是以真正例率(TPR)为纵轴,假正例率(FPR)为横轴绘制的曲线。
TPR是被正确分类为正例的样本数量与正例总样本数量的比值,FPR是被错误分类为正例的样本数量与负例总样本数量的比值。
ROC曲线能很好地表示模型在不同分类阈值下的性能。
AUC值是ROC曲线下的面积,取值范围为[0, 1]。
AUC值越接近1,说明模型的性能越好。
5. 均方误差(Mean Squared Error, MSE)均方误差是模型预测结果与真实值之间差异的平方和的均值。
MSE常用于回归问题的模型评估,越小表示模型的性能越好。
6.对数损失(Log Loss)对数损失是用于评估分类模型预测概率分布的指标。
对数损失越小,表示模型的性能越好。
在模型评估中常用的指标有哪些?请说明其含义1. 引言在机器学习和数据分析领域,模型评估是评估模型性能和效果的重要步骤。
通过使用合适的评估指标,可以客观地衡量模型的准确性、稳定性和可靠性。
本文将介绍在模型评估中常用的指标,并解释其含义和用途。
2. 准确率(Accuracy)准确率是最常用的模型评估指标之一,它衡量了分类模型在所有样本中正确分类的比例。
准确率可以通过将正确分类的样本数除以总样本数来计算。
然而,准确率不能很好地处理数据不平衡问题,因为它只关注了正确分类样本而忽略了错误分类样本。
3. 精确率(Precision)精确率是指在所有预测为正例中真正为正例的比例。
它可以通过将真正为正例的样本数除以预测为正例的总样本数来计算。
精确率关注于预测结果中真实为正例占比,适用于对假阳性有较高要求或对误报较敏感的场景。
4. 召回率(Recall)召回率是指在所有实际为正例中被正确预测为正例的比例。
它可以通过将真正为正例的样本数除以实际为正例的总样本数来计算。
召回率关注于模型对真实为正例的覆盖程度,适用于对假阴性有较高要求或对漏报较敏感的场景。
5. F1值(F1 Score)F1值是精确率和召回率的调和平均值,用于综合考虑精确率和召回率。
F1值可以通过计算2倍精确率和召回率的乘积除以精确率和召回率之和来计算。
F1值适用于在不同模型之间进行比较,并平衡了精确性和覆盖性。
6. AUC-ROC(Area Under the Receiver Operating Characteristic Curve)AUC-ROC是评估二分类模型性能的常用指标之一。
ROC曲线绘制了不同阈值下真阳性比例(TPR)与假阳性比例(FPR)之间的关系,AUC-ROC则是ROC曲线下方面积。
AUC-ROC越接近1,说明模型分类能力越好。
7. 均方误差(Mean Squared Error)均方误差是评估回归模型预测结果与实际观测结果之间差异程度的指标。
用于二分类的机器学习模型评价机器学习模型评价是确定模型在给定数据集上的性能和效果的过程。
在进行二分类任务时,我们通常会使用一些常见的指标来评估模型的性能。
以下是一些用于二分类模型评价的常见指标:1. 准确率(Accuracy):准确率是最常用的分类模型评价指标之一、它是指模型预测正确的样本数量占总样本数的比例。
准确率越高,说明模型的性能越好。
2. 精确率(Precision):精确率是指模型预测为正例的样本中真正为正例的样本的比例。
它衡量的是模型对正例的分类准确程度。
精确率高表示模型对于预测正例的能力较强。
3. 召回率(Recall):召回率是指模型正确预测为正例的样本占真实正例样本的比例。
它衡量的是模型对于正例的覆盖程度,即模型正确识别出的正例数量占所有真实正例的比例。
4. F1分数(F1 Score):F1分数是精确率和召回率的加权平均值,用于综合评价模型的性能。
F1分数越高,表示模型的性能越好。
5. AUC-ROC(Area Under Curve - Receiver Operating Characteristic):AUC-ROC是绘制ROC曲线下的面积。
ROC曲线是以召回率为纵轴,以1-特异度(1-Specificity)为横轴绘制的,用于评估二分类模型在各个阈值下的性能。
AUC-ROC越大,说明模型的性能越好。
6. 混淆矩阵(Confusion Matrix):混淆矩阵是用于可视化分类模型性能的矩阵。
它将预测结果划分为真正例(True Positive, TP)、真反例(True Negative, TN)、假正例(False Positive, FP)和假反例(False Negative, FN)。
通过观察混淆矩阵,我们可以更直观地了解模型的性能。
在评价模型时,我们通常会通过交叉验证或者留出法将数据集划分为训练集和测试集,然后在测试集上进行评价。
除了以上常见的指标外,还有一些特定场景下的评价指标,如查准率(Precision at K)、均衡精度(Balanced Accuracy)、Matthews相关系数(Matthews Correlation Coefficient)等。
机器学习模型评估指标总结机器学习模型评估指标是衡量模型性能的重要指标,能够帮助我们判断模型的优劣并进行模型的选择、优化和比较等。
在机器学习中,常用的模型评估指标包括准确率、精确度、召回率、F1值、AUC-ROC、AUC-PR、平均绝对误差(MAE)、均方误差(MSE)、对数损失(Log Loss)等。
下面将对这些指标逐一进行介绍和总结。
1. 准确率(Accuracy):准确率是最常见也是最直观的评估指标,其表示模型预测正确的样本数占总样本数的比例。
准确率的计算公式为:(预测正确的样本数)/(总样本数)。
2. 精确度(Precision):精确度是指模型在所有预测为正类的样本中,实际为正类的样本占比。
精确度的计算公式为:(真正类的样本数)/(真正类的样本数+假正类的样本数)。
3. 召回率(Recall):召回率是指模型找到的正类样本占实际为正样本的比例,也称为查全率。
召回率的计算公式为:(真正类的样本数)/(真正类的样本数+假负类的样本数)。
4.F1值:F1值是综合考虑了精确度和召回率的指标,用于衡量模型的综合性能。
F1值的计算公式为:2*(精确度*召回率)/(精确度+召回率)。
5. AUC-ROC(Area Under the Receiver Operating Characteristic curve):AUC-ROC是用于评估二分类模型的性能指标,表示ROC曲线下的面积。
ROC曲线是以假正类率(False Positive Rate)为横轴,真正类率(True Positive Rate)为纵轴的曲线,AUC-ROC越接近于1,模型的性能越好。
6. AUC-PR(Area Under the Precision-Recall curve):AUC-PR是另一种用于评估二分类模型性能的指标,表示Precision-Recall曲线下的面积。
PR曲线是以召回率为横轴,精确度为纵轴的曲线,AUC-PR越接近于1,模型的性能越好。
模型评估报告总结分析方法模型评估报告是对机器学习模型进行评估和分析的重要工具。
在评估报告中,我们通常会包括模型性能评估、特征重要性分析、模型误差分析等内容。
下面以分类模型为例,总结分析模型评估报告的方法。
1. 模型性能评估:模型性能评估是模型评估报告的核心部分,通常包括准确率、精确率、召回率、F1值等指标的计算和分析。
可以使用混淆矩阵来计算这些指标,然后根据具体需求进行分析。
例如,我们可以计算模型的准确率,这是指模型预测正确样本的比例。
较高的准确率意味着模型的整体性能较好,但需要注意是否有类别不平衡的情况,导致准确率不准确。
可以使用精确率和召回率来更全面地评估模型的性能。
2. 特征重要性分析:特征重要性分析是对模型中各个特征的重要性进行评估和分析。
可以使用特征重要性排序、特征重要性图表等方式来展示特征的重要性。
例如,可以使用随机森林等模型来计算特征的重要性。
得到特征重要性后,可以根据重要性排序来选择特征,进一步提高模型的性能。
同时,特征重要性分析还可以帮助我们理解数据中的重要特征,并对模型的解释性进行评估。
3. 模型误差分析:模型误差分析是对模型在不同类别、不同样本上的错误进行分析。
通过分析模型在不同类别上的误差,可以帮助我们理解模型的偏差和方差,找到模型改进的方向。
例如,可以计算不同类别的精确率和召回率,分析模型在各个类别上的表现。
如果模型在某些类别上的表现较差,可以进一步分析错误的原因,比如是否存在类别不平衡、样本标签错误等。
此外,还可以通过模型的学习曲线来分析模型的偏差和方差。
学习曲线可以帮助我们判断模型是否过拟合或欠拟合,并找到调整模型的方法。
综上所述,模型评估报告的分析方法主要包括模型性能评估、特征重要性分析和模型误差分析。
通过对模型性能、特征重要性和模型误差的分析,可以帮助我们理解模型的表现、发现模型的问题,并提出改进的方法。
这些分析方法在模型评估和优化过程中非常重要。
机器学习中的效果评估指标在机器学习中,效果评估指标是非常重要的一部分。
它们用来评估模型的性能,帮助我们了解模型的优劣和适用范围。
本文将介绍机器学习中常用的一些效果评估指标,以及它们的应用和局限性。
一、准确率准确率是最常用的机器学习效果评估指标之一。
它简单地表示模型预测正确的比例。
准确率 = (真正例 + 真负例) / 总样本数。
然而,准确率并不适用于所有情况。
当数据不平衡时,比如正例和负例的数量差别很大时,准确率就不能很好地反映模型的性能。
二、精准率和召回率精准率和召回率是用来评估二分类模型性能的重要指标。
精准率表示模型预测为正例的样本中有多少是真正例。
精准率 = 真正例 / (真正例 + 假正例)。
召回率表示真正例中有多少被模型成功预测出来。
召回率 = 真正例 / (真正例 + 假负例)。
精准率和召回率常常是一对矛盾的指标,提高精准率可能导致召回率下降,反之亦然。
三、F1值F1值是精准率和召回率的调和平均数。
它综合考虑了精准率和召回率,适用于评估模型的综合性能。
F1值越高,模型的性能越好。
四、ROC曲线和AUC值ROC曲线是用来评估二分类模型性能的重要工具。
它以真正例率为纵轴,假正例率为横轴,描述了模型在不同阈值下的性能。
AUC值是ROC曲线下的面积,用来衡量模型的整体性能。
AUC值越接近1,模型性能越好。
五、混淆矩阵混淆矩阵是一种直观地展示模型预测结果的方法。
它以真实标签和模型预测结果为两个维度,将样本分为真正例、假正例、真负例和假负例。
通过混淆矩阵可以清晰地看出模型的预测效果,帮助我们了解模型的优劣。
六、平均绝对误差和均方误差在回归问题中,平均绝对误差和均方误差是常用的评估指标。
平均绝对误差是模型预测值和真实值之间的绝对差值的平均数,均方误差是差值的平方的平均数。
这两个指标用来评估模型对真实值的拟合程度。
总结机器学习中的效果评估指标有很多种,每种指标都有其适用的场景和局限性。
我们需要根据具体的问题和数据特点选择合适的评估指标,综合考虑模型的精度、召回率、F1值、ROC曲线、AUC值、混淆矩阵等指标,来全面评估模型的性能。
准确率是最简单的评价指标,公式如下:但是存在明显的缺陷:相应地还有错误率:分类错误的样本占总样本的比例。
from sklearn.metrics import accuracy_score真实情况预测结果正例预测结果反例反例FP(假正例) TN(真反例)然后,很容易就得到精准率(P)和召回率(R)的计算公式:得到 P 和 R 后就可以画出更加直观的P-R 图(P-R 曲线),横坐标为召回率,纵坐标是精准率。
绘制方法如下:•对模型的学习结果进行排序(一般都有一个概率值)•按照上面的顺序逐个把样本作为正例进行预测,每次都可以得到一个 P R 值•将得到的 P R 值按照 R 为横坐标,P 为纵坐标绘制曲线图。
from typing import List, Tupleimport matplotlib.pyplot as pltdef get_confusion_matrix(y_pred: List[int],y_true: List[int]) -> Tuple[int, int, int, int]:length = len(y_pred)assert length == len(y_true)tp, fp, fn, tn = 0, 0, 0, 0for i in range(length):if y_pred[i] == y_true[i] and y_pred[i] == 1:tp += 1elif y_pred[i] == y_true[i] and y_pred[i] == 0:tn += 1elif y_pred[i] == 1 and y_true[i] == 0:fp += 1elif y_pred[i] == 0 and y_true[i] == 1:fn += 1return (tp, fp, tn, fn)def calc_p(tp: int, fp: int) -> float:return tp / (tp + fp)def calc_r(tp: int, fn: int) -> float:return tp / (tp + fn)def get_pr_pairs(y_pred_prob: List[float],y_true: List[int]) -> Tuple[List[int], List[int]]:ps = [1]rs = [0]for prob1 in y_pred_prob:y_pred_i = []for prob2 in y_pred_prob:if prob2 < prob1:y_pred_i.append(0)else:y_pred_i.append(1)tp, fp, tn, fn = get_confusion_matrix(y_pred_i, y_true)p = calc_p(tp, fp)r = calc_r(tp, fn)ps.append(p)rs.append(r)ps.append(0)rs.append(1)return ps, rsy_pred_prob = [0.9, 0.8, 0.7, 0.6, 0.55, 0.54, 0.53, 0.52, 0.51, 0.505,0.4, 0.39, 0.38, 0.37, 0.36, 0.35, 0.34, 0.33, 0.3, 0.1]y_true = [1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0]y_pred = [1] * 10 + [0] * 10ps, rs = get_pr_pairs(y_pred_prob, y_true)fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(12, 5))ax.plot(rs, ps);如果有多个模型就可以绘制多条 P-R 曲线:•如果某个模型的曲线完全被另外一个模型“包住”(即后者更加凹向原点),那么后者的性能一定优于前者。
•如果多个模型的曲线发生交叉,此时不好判断哪个模型较优,一个较为合理的方法是计算曲线下面积,但这个值不太好估算。
为了获得模型优劣,需要综合 P 和 R,平衡点 BEP(Break-Even Point)就是这样一个度量,它是 P=R 时的取值,BPE 越远离原点,说明模型效果越好。
由于 BPE 过于简单,实际中常用 F1 值衡量:F1 有更一般的形式:•当β > 1 时,更偏好召回•当β < 1 时,更偏好精准•当β = 1 时,平衡精准和召回,即为 F1F1 其实来自精准和召回的加权调和平均:当有多个混淆矩阵(多次训练、多个数据集、多分类任务)时,有两种方式估算“全局”性能:•macro 方法:先计算每个 PR,取平均后,再计算 F1•micro 方法:先计算混淆矩阵元素的平均,再计算 PR 和 F1三、RMSE均方根误差 RMSE(Root Mearn Square Error)主要用在回归模型,也就是俗称的 R 方。
计算公式为:但是如果有非常严重的离群点时,那些点会影响 RMSE 的结果,针对这个问题:•如果离群点为噪声,则去除这些点•如果离群点为正常样本,可以重新建模•换一个评估指标,比如平均绝对百分比误差 MAPE(Mean Absolute Percent Error),MAPE 对每个误差进行了归一化,一定程度上降低了离群点的影响。
四、ROC 和 AUC受试者工作特征ROC(Receiver Operating Characteristic)曲线是另一个重要的二分类指标。
它的横坐标是“假正例率”FPR(False Positive Rate),纵坐标是“真正例率”TPR(True Positive Rate),计算公式如下:绘制方法和上面的 P-R 曲线类似,不再赘述。
def calc_fpr(fp: int, tn: int) -> float:return fp / (fp + tn)def calc_tpr(tp: int, fn: int) -> float:return tp / (tp + fn)def get_ftpr_pairs(y_pred_prob: List[float],y_true: List[int]) -> Tuple[List[int], List[int]]:fprs = [0]tprs = [0]for prob1 in y_pred_prob:y_pred_i = []for prob2 in y_pred_prob:if prob2 < prob1:y_pred_i.append(0)else:y_pred_i.append(1)tp, fp, tn, fn = get_confusion_matrix(y_pred_i, y_true)fpr = calc_fpr(fp, tn)tpr = calc_tpr(tp, fn)fprs.append(fpr)tprs.append(tpr)fprs.append(1)tprs.append(1)return fprs, tprsfprs, tprs = get_ftpr_pairs(y_pred_prob, y_true)fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(12, 5))ax.plot(fprs, tprs);除此之外,还有一种绘制 ROC 曲线的方法:•假设有 m+ 个正例,m- 个负例,对模型输出的预测概率按从高到低排序•然后依次将每个样本的预测值作为阈值(即将该样本作为正例),假设前一个坐标为(x, y),若当前为真正例,对应标记点为(x, y+1/m+),若当前为假正例,则对应标记点为(x+1/m-, y)•将所有点相连即可得到 ROC 曲线该方法和这种做法是一样的:将纵坐标的刻度间隔设为 1/m+,横坐标的刻度间隔设为 1/m-,从(0,0)开始,每遇到一个真正例就沿着纵轴绘制一个刻度间隔的曲线,假正例就沿着横轴绘制一个刻度间隔的曲线,最终就可以得到 ROC 曲线。
def get_ftpr_pairs2(y_pred_prob: List[float],y_true: List[int]) -> Tuple[List[int], List[int]]:mplus = sum(y_true)msub = len(y_true) - mpluspairs = [(0, 0)]prev = (0, 0)length = len(y_pred_prob)assert length == len(y_true)for i in range(length):if y_true[i] == 1:pair = (prev[0], prev[1] + 1/mplus)else:pair = (prev[0] + 1/msub, prev[1])pairs.append(pair)prev = pairpairs.append((1, 1))fprs, tprs = [], []for pair in pairs:fprs.append(pair[0])tprs.append(pair[1])return fprs, tprsfprs, tprs = get_ftpr_pairs2(y_pred_prob, y_true)fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(12, 5))ax.plot(fprs, tprs);该方法和上面第一种方法得到的曲线完全一致。
多个模型时,与 P-R 曲线也是类似,如果某个模型的曲线完全“包住”另一个,则前者性能好于后者。
如果曲线相互交叉,则比较曲线下面积:AUC(Area Under ROC Curve)。
AUC 取值一般在 0.5-1 之间,处于 y=x 直线的上方(如果不是的话,把预测概率翻转成 1-p 就能获得更好的模型)。
AUC 值越大,说明模型越可能把真正例排在前面,性能越好。
此时,假正例率很低同时真正例率很高,意味着召回高并且误判率小。
对角线对应着随机模型(各占 50%),(0,1)点对应的是理想模型,即所有正例 100% 召回且没有一个负例被判别为正例。
AUC 面积可以通过以下公式进行估算:AUC 考虑的是样本预测的排序质量,与排序误差紧密相连,排序“损失” loss 可定义为:该式子的意思是,如果正例预测值小于负例,计 1 个罚分,如果相等则计 0.5 个罚分。