📅  最后修改于: 2020-12-10 05:42:41             🧑  作者: Mango
我们可以使用各种指标来评估ML算法,分类以及回归算法的性能。我们必须谨慎选择评估ML性能的指标,因为-
如何测量和比较ML算法的性能完全取决于您选择的指标。
您如何权衡各种特征在结果中的重要性,将完全取决于您选择的指标。
在前面的章节中,我们讨论了分类及其算法。在这里,我们将讨论各种性能指标,这些指标可用于评估分类问题的预测。
这是衡量分类问题性能的最简单方法,其中输出可以是两种或多种类型的类。混淆矩阵不过是具有二维的表。 “实际”和“预测”,此外,这两个维度均具有“真阳性(TP)”,“真阴性(TN)”,“假阳性(FP)”,“假阴性(FN)”,如下所示-
与混淆矩阵相关的术语的解释如下-
真实正值(TP) -数据点的实际类别和预测类别均为1时会出现这种情况。
真负数(TN) -数据点的实际类别和预测类别都为0的情况。
误报(FP) -数据点的实际类别为0且数据点的预测类别为1的情况。
假阴性(FN) -数据点的实际类别为1而数据点的预测类别为0的情况。
我们可以使用sklearn.metrics的confusion_matrix函数来计算分类模型的Confusion Matrix。
它是分类算法最常见的性能指标。可以将其定义为正确预测的数量,以其作为所有预测的比例。我们可以借助以下公式轻松地通过混淆矩阵来计算它-
$$ Accuracy = \ frac {TP + TN} {𝑇𝑃+𝐹𝑃+𝐹𝑁+𝑇𝑁} $$
我们可以使用sklearn.metrics的precision_score函数来计算分类模型的准确性。
该报告由“精确度”,“召回率”,“ F1”和“支持”得分组成。它们解释如下-
文档检索中使用的精度可以定义为我们的ML模型返回的正确文档数。我们可以借助以下公式轻松地通过混淆矩阵来计算它-
$$ Precision = \ frac {TP} {TP + FP} $$
召回率可以定义为我们的ML模型返回的肯定数。我们可以借助以下公式轻松地通过混淆矩阵来计算它-
$$ Recall = \ frac {TP} {TP + FN} $$
与召回相反,特异性可以定义为我们的ML模型返回的阴性数。我们可以借助以下公式轻松地通过混淆矩阵来计算它-
$$ Specificity = \ frac {TN} {TN + FP} $$
支持可以定义为每类目标值中真实响应的样本数。
该分数将为我们提供精确度和查全率的调和平均值。在数学上,F1分数是精度和召回率的加权平均值。 F1的最佳值是1,最差的是0。我们可以使用以下公式来计算F1得分-
𝑭𝟏=𝟐∗(𝒑𝒓𝒆𝒄𝒊𝒔𝒊𝒐𝒏∗𝒓𝒆𝒄𝒂𝒍𝒍)/(𝒑𝒓𝒆𝒄𝒊𝒔𝒊𝒐𝒏+𝒓𝒆𝒄𝒂𝒍𝒍)
F1分数在准确性和召回率上具有相等的相对贡献。
我们可以使用sklearn.metrics的category_report函数来获取我们的分类模型的分类报告。
AUC(曲线下面积)-ROC(接收器工作特性)是一种性能指标,基于变化的阈值,用于分类问题。顾名思义,ROC是一条概率曲线,而AUC则测量了可分离性。简而言之,AUC-ROC度量标准将告诉我们有关模型区分类的能力。 AUC越高,模型越好。
从数学上讲,它可以通过在各种阈值下绘制TPR(真正率)即灵敏度或召回率与FPR(假正率)即1-Specific来创建。下图显示了ROC,在y轴上具有TPR且在x轴上具有FPR的AUC-
我们可以使用sklearn.metrics的roc_auc_score函数来计算AUC-ROC。
也称为逻辑回归损失或交叉熵损失。它基本上是根据概率估计定义的,并衡量分类模型的性能,其中输入是介于0和1之间的概率值。通过精确区分它可以更清楚地理解。众所周知,准确度是模型中预测的计数(预测值=实际值),而对数损失是基于预测值与实际标签相差多少的预测不确定性量。借助对数损失值,我们可以更准确地了解模型的性能。我们可以使用sklearn.metrics的log_loss函数来计算对数损失。
以下是Python的一个简单配方,它将使我们了解如何在二进制分类模型上使用上述解释的性能指标-
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.metrics import roc_auc_score
from sklearn.metrics import log_loss
X_actual = [1, 1, 0, 1, 0, 0, 1, 0, 0, 0]
Y_predic = [1, 0, 1, 1, 1, 0, 1, 1, 0, 0]
results = confusion_matrix(X_actual, Y_predic)
print ('Confusion Matrix :')
print(results)
print ('Accuracy Score is',accuracy_score(X_actual, Y_predic))
print ('Classification Report : ')
print (classification_report(X_actual, Y_predic))
print('AUC-ROC:',roc_auc_score(X_actual, Y_predic))
print('LOGLOSS Value is',log_loss(X_actual, Y_predic))
Confusion Matrix :
[
[3 3]
[1 3]
]
Accuracy Score is 0.6
Classification Report :
precision recall f1-score support
0 0.75 0.50 0.60 6
1 0.50 0.75 0.60 4
micro avg 0.60 0.60 0.60 10
macro avg 0.62 0.62 0.60 10
weighted avg 0.65 0.60 0.60 10
AUC-ROC: 0.625
LOGLOSS Value is 13.815750437193334
在前面的章节中,我们讨论了回归及其算法。在这里,我们将讨论各种性能指标,这些指标可用于评估回归问题的预测。
它是用于回归问题的最简单的误差度量。它基本上是预测值与实际值之间的绝对差的平均值之和。简而言之,借助MAE,我们可以了解预测的错误程度。 MAE不指示模型的方向,即不指示模型的性能不足或性能过高。以下是计算MAE的公式-
$$ MAE = \ frac {1} {n} \ sum | Y-\ hat {Y} | $$
𝑌=实际输出值
并且$ \ hat {Y} $ =预测的输出值。
我们可以使用sklearn.metrics的mean_absolute_error函数来计算MAE。
MSE就像MAE,但是唯一的区别是,它在对所有实际值和预测值进行求和之前将它们平方和,而不是使用绝对值。可以在以下公式中注意到差异-
$$ MSE = \ frac {1} {n} \ sum(Y-\ hat {Y})$$
𝑌=实际输出值
$ \ hat {Y} $ =预测的输出值。
我们可以使用sklearn.metrics的mean_squared_error函数来计算MSE。
R平方度量通常用于说明目的,并提供一组预测输出值与实际输出值之间的优劣程度的指示。以下公式将帮助我们理解它-
$$ R ^ {2} = 1-\ frac {\ frac {1} {n} \ sum_ {i {= 1}} ^ n(Y_ {i}-\ hat {Y_ {i}})^ 2} {\ frac {1} {n} \ sum_ {i {= 1}} ^ n(Y_ {i}-\ bar {Y_i)^ 2}} $$
在上式中,分子为MSE,分母为is值的方差。
我们可以使用sklearn.metrics的r2_score函数来计算R平方值。
以下是Python的一个简单配方,它将使我们了解如何在回归模型上使用上述解释的性能指标-
from sklearn.metrics import r2_score
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
X_actual = [5, -1, 2, 10]
Y_predic = [3.5, -0.9, 2, 9.9]
print ('R Squared =',r2_score(X_actual, Y_predic))
print ('MAE =',mean_absolute_error(X_actual, Y_predic))
print ('MSE =',mean_squared_error(X_actual, Y_predic))
R Squared = 0.9656060606060606
MAE = 0.42499999999999993
MSE = 0.5674999999999999