文章目录
目录
前言
模型评估是在机器学习中,对训练好的模型性能进行评估的一种方法。它是模型开发过程中不可或缺的一部分,因为它可以帮助我们发现哪种模型能够最好地表达数据,以及所选模型在未来工作的性能如何。模型评估的方法有很多,例如准确率、召回率、F1分数、AUC-ROC等,通过这些方法,我们可以更全面地了解模型的性能,从而做出更好的决策。
一、常见的模型分类指标
1.混淆矩阵
混淆矩阵(Confusion Matrix)是一种在机器学习中常用的工具,用于可视化分类模型的性能。它通过将实际类别和预测类别进行比较,展示模型在分类任务中的表现。
混淆矩阵通常以矩阵的形式呈现,其中行表示实际类别,列表示预测类别。矩阵中的每个单元格表示实际类别和预测类别的对应关系
预测结果 | |||
真实结果 | 1 | 0 | |
1 | 真正例(TP) | 伪反例(FN) | |
0 | 伪正例(FP) | 真反例(TN) |
1. True Positive (TP):真正类。表示模型正确地将正类样本预测为正类。即模型识别的结果与样本的真实归属类别一致。
2. False Negative (FN):假负类。也称为漏报,表示模型错误地将正类样本预测为负类。即模型没有识别出样本的真实正类属性。
3. False Positive (FP):假正类。也称为误报,表示模型错误地将负类样本预测为正类。即模型错误地将样本分类到了正类。
4. True Negative (TN):真负类。表示模型正确地将负类样本预测为负类。即模型识别的结果与样本的真实归属类别一致。
通过观察混淆矩阵,可以了解模型在各种类别上的表现,包括准确率、召回率、精确率、F1分数等指标。这些指标可以帮助我们评估模型的性能,并找出需要改进的地方。
2. 准确率(Accuracy)
准确率是指:模型正确预测的样例(真正例 + 真反例)占样本总数的比例。对于二类问题,准确率的计算公式如下:
3. 精确率(Precision)
精确率是指预测为正例的样本中的真正正例的比例。对于二类问题,精确率的计算公式如下:
4. 召回率(Recall)
召回率(Recall)是指预测为正例的真实正例占所有真实正例的比例。对于二类问题,召回率的计算公式如下:
5. F1分数(F1 Score)
F1分数(F1 Score)是一个评估分类模型性能的指标,它同时考虑了模型的精确率和召回率。F1分数的计算公式如下:
F1分数的值范围在0到1之间,1表示模型在这两个指标上都达到了完美水平。F1分数综合考虑了精确率和召回率,使得模型在两个指标上达到平衡。因此它可以作为很好的性能评估指标,尤其是在类别不平衡的数据集上。
6.ROC曲线(Receiver Operating Characteristic Curve)是一种用于评估二分类模型的性能的图形化工具。ROC曲线显示了在不同阈值下真正例率(True Positive Rate,又称召回率)与假正例率(False Positive Rate)之间的关系。
- 真正例率(True Positive Rate, TPR)又称召回率(Recall):TPR = TP / (TP + FN),表示正样本中被分类器正确识别为正类别的比例。
-假正例率(False Positive Rate, FPR):FPR = FP / (FP + TN),表示负样本中被错误分类为正类别的比例。
ROC曲线的横轴是FPR,纵轴是TPR,每个点代表在不同阈值下分类器的性能。具体绘制方法是,从大到小改变分类器的预测概率阈值,计算相应的TPR和FPR,并将这些点连接起来形成曲线。
ROC曲线的优劣可以通过曲线下面积(Area Under the Curve,AUC)来进行评估。AUC的取值范围在0到1之间,AUC值越接近1,表示分类器的性能越好,即在所有可能的阈值下,正例排在负例前面的概率更高。
ROC曲线通常用于评估模型在不同类别之间的性能,并且相对于PR曲线更适用于数据分布不平衡的情况。通过分析ROC曲线,我们能够更好地了解模型在不同阈值下的表现,并选择最适合应用场景的模型。
7.PR曲线
PR曲线(Precision-Recall Curve)是用于评估分类器在不同阈值下的性能的一种图形化表示方法。PR曲线显示了不同阈值下的精确率(Precision)和召回率(Recall)之间的关系。
PR曲线的横轴是召回率,纵轴是精确率,每个点表示在不同阈值下分类器的性能。通常情况下,精确率和召回率是相互抵消的,即提高精确率可能会导致召回率下降,反之亦然。因此,在绘制PR曲线时,我们可以根据应用场景的需求来寻找平衡点,例如在精确率和召回率都较高时选择最佳的阈值。
PR曲线通常用于比较不同分类模型的性能,特别适用于不均衡数据集的情况下。在PR曲线中,曲线下方的面积越大,表示分类器的性能越好。通过分析PR曲线,我们可以更好地了解分类器在不同阈值下的表现,并选择最适合应用场景的模型。
二、ROC与PR的应用
1.引入库
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, ConfusionMatrixDisplay, confusion_matrix,roc_curve, precision_recall_curve
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
# 生成示例数据
import numpy as np
2.读入数据
代码如下(示例):
import numpy as np
X_train = np.random.rand(100, 2) # 100个样本,每个样本有2个特征
y_train = np.random.randint(2, size=100) # 100个样本的标签
split_ratio = 0.8 # 测试集的比例
test_size = int(split_ratio * X_train.shape[0]) # 测试集的大小
X_test = X_train[test_size:] # 测试集的样本
X_train = X_train[:test_size] # 训练集的样本
y_test = y_train[test_size:] # 测试集的标签
y_train = y_train[:test_size] # 训练集的标签
3. 训练模型(knn)
knn = KNeighborsClassifier(k)
knn.fit(X_train, y_train)
4.绘制Roc 与 Pr
# 计算评估指标
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
print("Accuracy: {}".format(accuracy))
print("Precision: {}".format(precision))
print("Recall: {}".format(recall))
print("F1 Score: {}".format(f1))
# 计算ROC曲线和AUC
y_pred_prob = knn.predict_proba(X_test)[:, 1]
fpr, tpr, _ = roc_curve(y_test, y_pred_prob)
roc_auc = roc_auc_score(y_test, y_pred_prob)
# 绘制ROC曲线
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.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve''(k={0:.0f})'.format(k))
plt.legend(loc="lower right")
plt.show()
# 计算PR曲线
precision, recall, _ = precision_recall_curve(y_test, y_pred_prob)
# 绘制PR曲线
plt.figure()
plt.plot(recall, precision, color='cornflowerblue', lw=2, label='Precision-Recall curve')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve''(k={0:.0f})'.format(k))
plt.legend(loc="lower left")
plt.show()
5.效果图
Roc 与 Pr 对比
ROC曲线和PR曲线都是用于评估分类器性能的工具,但它们强调的方面不同。ROC曲线更关注正确分类的假正例的概率,而PR曲线则关注真正例的比例。一般来说,两者在评价模型性能上各有优势。
当取多组k值时Roc
由图可以发现当K值越来越大时,AUC(area)处下降趋势,即分类器的性能在下降,当然也可能是因为本文中所收集的数据是随机数据有关
ps:ROC曲线下的面积,即AUC,是一个常用的分类器性能度量。AUC值越接近1,表示分类器性能越好。
总结
通过本次实验 理解和掌握常见的分类模型评估指标,如准确率、精确率、召回率、F1分数等。 - 学习和使用ROC曲线和PR曲线来评估模型性能。 分析不同k值下的ROC曲线,以观察模型性能的变化。同时实验结果将说明不同评估指标对于模型性能的贡献和限制。 - ROC曲线和PR曲线能够提供模型性能的全面视图,帮助研究者选择最优模型和参数。 - 在实际应用中,应根据具体问题和数据集特性选择合适的评估指标和方法。