在机器学习领域,模型评估是一个至关重要的环节,它帮助理解模型的性能并指导如何改进。本文将深入探讨分类模型的评估方法,包括精确度、召回率、F1分数等核心指标,并讨论它们之间的权衡关系。
机器学习任务主要分为三类:监督学习、无监督学习和强化学习。在监督学习中,模型通过训练集(包含输入-预期输出对)进行训练,之后可以用于预测未知输入的输出。无监督学习中,模型自行尝试在训练集中识别模式。而强化学习则是一种完全不同的类型,本文不作讨论。
作为机器学习工程师,经常需要评估分类模型的性能。以手写字母识别器为例,首先会使用精确度作为评估指标。精确度是正确预测的数量与总预测数量的比率。然而,精确度是否足以评估模型性能呢?答案是否定的。
混淆矩阵是一个n×n的矩阵,用于描述分类模型的性能。每一行代表一个实际类别,每一列代表一个预测类别。可以使用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"])
通过混淆矩阵,可以计算出精确度、召回率等指标。精确度是模型做出的真正例预测数量与总真正例预测数量的比率。召回率是真正例预测数量与总实际正例数量的比率。
在实际应用中,经常需要在精确度和召回率之间做出权衡。例如,在癌症检测系统中,可能更倾向于高召回率和低精确度;而在滥用词汇检测器中,可能更倾向于高精确度和低召回率。
F1分数是精确度和召回率的调和平均值,它在两者都很高时才会很高。可以使用sklearn库中的f1_score()函数来计算F1分数。
from sklearn.metrics import f1_score
y_true = [[0, 0, 0], [1, 1, 1], [0, 1, 1]]
y_pred = [[0, 0, 0], [1, 1, 1], [1, 1, 0]]
f1_score(y_true, y_pred, average=None)
from sklearn.metrics import roc_curve
fpr, tpr, thresholds = roc_curve(y_true, y_predicted)