一文详解人工智能模型评估方法和体系
定义:
人工智能模型评估方法和体系用于帮助我们评估和比较不同人工智能模型性能的方法和框架。在人工智能领域,模型评估是至关重要的,因为它可以帮助我们了解模型的优劣,找出改进的方向,以及选择最适合特定任务的模型。
1. 准确率 (Accuracy)
准确率是最直观的性能指标,表示正确预测的数量占总预测数量的比例。
Accuracy=TP+TNTP+TN+FP+FN\text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}Accuracy=TP+TN+FP+FNTP+TN
- TP: 真正例(True Positives)
- TN: 真负例(True Negatives)
- FP: 假正例(False Positives)
- FN: 假负例(False Negatives)
看不懂? OK 献丑了,上个生动的例子,上朕的笔记!
笔者用一个简单的医疗检测例子来通俗易懂地解释一下这四个术语:
-
真正例(TP, True Positives):指的是模型正确地将患者的疾病状态预测为阳性(即患病)的情况。例如,在癌症检测中,模型预测某个患者患有癌症,而实际上该患者确实患有癌症,这就是一个真正例。
-
真负例(TN, True Negatives):指的是模型正确地将患者的疾病状态预测为阴性(即健康)的情况。继续上述例子,如果模型预测某个健康的人没有患癌症,而实际上这个人确实没有患癌症,这就是一个真负例。
-
假正例(FP, False Positives):也称为误报或第一类错误。指的是模型错误地将健康的人预测为患病的情况。例如,模型预测一个健康的人患有癌症,但这个人实际上并没有患癌症,这就是一个假正例。
-
假负例(FN, False Negatives):也称为漏报或第二类错误。指的是模型错误地将患病的人预测为健康的情况。如果我们的癌症检测模型未能检测出实际上患有癌症的患者,这就是一个假负例。
想象一下,你在一个机场工作,你的任务是使用X光机来检查行李中是否携带违禁品:
- TP:你检查了一个行李,并告诉安检人员行李中有违禁品,打开后确实发现了违禁品。(你完蛋了,要和帽子叔叔喝茶了)
- TN:你检查了一个行李,并告诉安检人员行李中没有违禁品,打开后也确实没有发现违禁品。
- FP:你错误地告诉安检人员某个行李中有违禁品,但当他们打开检查时,里面并没有违禁品。
- FN:你错过了一个实际上携带违禁品的行李,告诉安检人员里面没有违禁品。
在实际应用中,我们通常希望TP最大化,同时减少FP和FN的数量,因为FP可能导致不必要的麻烦,而FN可能遗漏真正的问题。TN虽然是一个正面结果,但在评估模型性能时,我们更关注于减少FP和FN带来的影响。
通过好好理解我这个例子和笔记公式,相信大家能更好地理解什么是准确率了。
示例代码(Python):
from sklearn.metrics import accuracy_score
# 真实标签和预测标签
y_true = [0, 1, 1, 0, 1]
y_pred = [0, 1, 0, 0, 1]
accuracy = accuracy_score(y_true, y_pred)
print(f'Accuracy: {accuracy}')
2. 精确率 (Precision)
精确率表示为所有被模型预测为正类的样本中,实际为正类的比例。
Precision=TPTP+FP\text{Precision} = \frac{TP}{TP + FP}Precision=TP+FPTP
示例代码(Python):
from sklearn.metrics import precision_score
precision = precision_score(y_true, y_pred)
print(f'Precision: {precision}')
3. 召回率 (Recall) 或 真正率 (True Positive Rate, TPR)
召回率表示为所有实际为正类的样本中,被正确预测为正类的比例。
Recall=TPTP+FN\text{Recall} = \frac{TP}{TP + FN}Recall=TP+FNTP
示例代码(Python):
from sklearn.metrics import recall_score
recall = recall_score(y_true, y_pred)
print(f'Recall: {recall}')
4. F1 分数(很重要!很多比赛的最终模型评判就是依据这个分数!)
F1 分数是精确率和召回率的调和平均数,用于衡量模型的准确性和完整性的平衡。
F1=2×Precision×RecallPrecision+RecallF1 = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}F1=2×Precision+RecallPrecision×Recall
什么,感觉对F1-Score云里雾里?这可不行,给我上例子!
想象you是一名图书管理员,你的任务是从图书馆的大量书籍中找出特定的几本书籍。这些书籍是读者预约的,你需要确保既快速又准确地找到它们。
-
精确率(Precision):这相当于你找到的书籍中,有多少比例是读者真正预约的那几本。如果你找到了10本书,其中8本是读者预约的,那么精确率就是80%。
-
召回率(Recall):这相当于你找到的书籍占读者预约书籍总数的比例。如果读者预约了10本书,你找到了其中的8本,那么召回率也是80%。
现在,如果图书管理员只关注精确率,可能会花费很多时间来确保找到的每一本书都是正确的,这可能导致召回率降低,因为有预约的书籍没有被找到。反之,如果只关注召回率,可能会找到很多书籍,但其中只有一部分是正确的,这意味着精确率较低。
F1分数就是在这两者之间取得平衡的一种方法。它取精确率和召回率的调和平均数,给两者以相等的权重。
如果精确率和召回率都很高,F1分数也会很高。如果其中一个很低,F1分数也会受到影响。F1分数的范围是0到1,1表示完美的精确率和召回率,0表示两者都很差。
在图书管理员的例子中,如果你的精确率和召回率都是80%,那么F1分数就是:
F1=2×0.8×0.80.8+0.8=0.8 F1 = 2 \times \frac{0.8 \times 0.8}{0.8 + 0.8} = 0.8F1=2×0.8+0.80.8×0.8=0.8
这意味着你作为图书管理员在找到正确的书籍和确保找到所有预约书籍之间做得很好。F1分数提供了一个综合考虑精确性和完整性的评估,帮助我们理解模型在分类问题中的整体性能。
示例代码(Python):
from sklearn.metrics import f1_score
f1 = f1_score(y_true, y_pred)
print(f'F1 Score: {f1}')
5. 混淆矩阵 (Confusion Matrix)(了解即可)
混淆矩阵是一个表格,用于描述模型预测和实际标签之间的关系。
Confusion Matrix=[TPFPFNTN]\text{Confusion Matrix} = \begin{bmatrix} TP & FP \\ FN & TN \end{bmatrix}Confusion Matrix=[TPFNFPTN]
示例代码(Python):
from sklearn.metrics import confusion_matrix
conf_matrix = confusion_matrix(y_true, y_pred)
print(f'Confusion Matrix:\n{conf_matrix}')
6. ROC 曲线和 AUC 分数
ROC 曲线是通过不同阈值绘制真正率(召回率)与假正例率(1 - 特真率)的图形。AUC(Area Under the ROC Curve)分数表示模型的整体性能,AUC 越高,模型性能越好。
示例代码(Python):
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
# 假设 y_scores 是模型输出的概率或分数
y_scores = [0.1, 0.4, 0.35, 0.8, 0.7]
fpr, tpr, thresholds = roc_curve(y_true, y_scores)
roc_auc = auc(fpr, tpr)
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()
7. 平均绝对误差 (MAE) 和 均方误差 (MSE) - 回归模型
对于回归问题,MAE 和 MSE 是常用的评估指标。
-
平均绝对误差 (MAE):
MAE=1n∑i=1n∣yi−y^i∣MAE = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i|MAE=n1∑i=1n∣yi−y^i∣
-
均方误差 (MSE):
MSE=1n∑i=1n(yi−y^i)2MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1∑i=1n(yi−y^i)2
示例代码(Python):
from sklearn.metrics import mean_absolute_error, mean_squared_error
# 真实值和预测值
y_true_regression = [3, -0.5, 2, 7]
y_pred_regression = [2.5, 0.0, 2, 8]
mae = mean_absolute_error(y_true_regression, y_pred_regression)
mse = mean_squared_error(y_true_regression, y_pred_regression)
print(f'MAE: {mae}')
print(f'MSE: {mse}')
这些评估方法提供了不同角度的模型性能视图,选择哪种方法取决于具体的应用场景和模型目标。在实际应用中,通常需要综合考虑多个评估指标来全面理解模型的性能。
总结:
以上就是我对于人工智能模型评估方法和体系的总结。相信学习人工智能的同学以后会用到这上面的公式和方法无数次。欢迎大家点赞,收藏和交流,O(∩_∩)O谢谢!
Reference:
转载自:https://juejin.cn/post/7377581109155266587