【数据挖掘】分类器模型性能评估讲解及iris数据集评估实战(超详细 附源码)
需要源码请点赞关注收藏后评论区留言私信~~~
构建的分类器倾向于追求卓越的表现。
评估分类器的方式需要一套客观的标准来进行衡量。例如,在模型训练完成后,可以通过准确率等指标来量化模型的效果,并在多个候选模型中选择表现最优的那个
分类器性能的度量
建立分类器旨在使学习出的模型在面对既有数据和未曾见过的数据时均能提供可靠的预测结果。采用不同学习策略会导出一系列不同的模型参数设置。给定一个损失函数后,在该框架下计算出相应的训练误差与测试误差成为评估不同学习方法性能的重要指标。虽然缩小训练误差有助于提高模型在已知数据集上的表现,然而其重要性并不突出。通过测试集上的表现可以反映该学习方法在面对新的、未知的数据时的表现水平。

1. 混淆矩阵
基于实际类别与机器学习预测结果之间的结合(混淆矩阵, Confusion Matrix), 可以归为四种类型:真 positives (TP)、false positives (FP)、false negatives (FN) 和 true negatives (TN).
真正例指被分类器正确分类的正元组,令TP为真正例的个数
真负例指被分类器正确分类的负元组 令TN为真负例的个数
假正例指被错误的标记为正元组的负元组 令FP为假正例的个数
假负例指被错误的标记为负元组的正元组 令FN为假负例的个数
混淆矩阵是分析分类器识别不同类元组的一种有用工具

2.分类器常用评估量
该分类系统在测试集上的正确率为Accuracy被定义为由该系统计算得出的被正确识别的元组比例

(2)灵敏性和特效性 敏感度与特异性中,敏感度即真正类率(True Positive Rate, TPR),指的是分类器识别出的正例在全部正例中的比例。而特异性涉及真负例率(True Negative Rate, TNR),指的是正确识别的负样本占总负样本的比例

(3)精度和召回率 精度(Precision)也被广泛用于评估分类性能。精确度表示标记为正类的所有样本中真实属于正类的比例;它反映了分类器对已标记样本的识别准确性。召回值(Recall)则衡量了所有真实正类被成功识别的比例;这个指标关注的是分类器是否能够捕获到所有相关的实例


此外,在除以准确性为标准之外,在其他指标或维度上也可以对分类器进行比较。主要涉及的因素包括哪些。
速度:构建和使用分类器的计算开销
鲁棒性:对存在异常数据或缺失信息分类器实现准确预测的能力。一般通过逐步增加噪声和缺失值的数据集来验证模型的鲁棒性能。
可扩展性:在处理大规模数据时构建高效分类器的能力。通常情况下,可通过逐步扩大的数据序列来评估其扩展性能。
该分类器所呈现的理解与见解的水平即为可解释性。然而这一属性具有主观性质因为其难以量化评估。例如在简单的决策树模型中或基于分类规则的场景下通常能够实现较高的可解释性然而当模型变得更为复杂时这种特性往往会被削弱
(5)P-R曲线
评估模型性能时应避免仅依赖精确率或召回率指标
在绘制P-R曲线时,横坐标为召回率(Recall),纵坐标为精确率(Precision)。曲线上任意一点表示:当设定某一阈值时,在该阈值下将所有大于该阈值的结果标记为正类样本(Positive Class),而小于该阈值的结果标记为负类样本(Negative Class),此时该点对应的召回率和精确率数值即为此点在曲线上的体现。
(6)接收者操作特征曲线
该指标(Receiver Operating Characteristic Curve, ROC)是评估分类模型性能的重要工具,在区分正常与异常方面具有显著作用。它通过综合考量模型的真正例率(TPR)与假正例率(FPR),全面反映模型的分类能力。ROC曲线通过设定不同的临界值将连续变量转化为多个分类问题,并计算出每对(TPR,FPR)值进行绘图。曲线下面积越大,则模型诊断效率越高;而曲线上每一个具体点都对应着信号刺激下特定的感受性水平,在坐标图中距离左上方最近的点则代表最佳平衡点
Python分类器评估实例
首先导入相关模块和数据
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
from sklearn.metrics import roc_curve, auc
from sklearn import model_selection
iris = datasets.load_iris()
X = iris.data
y = iris.target
代码解释
iris数据取前2类数据并增加随机扰动
X, y = X[y != 2], y[y != 2]
#增加噪声
random_state = np.random.RandomState(0)
n_samples, n_features = X.shape
X = np.c_[X, random_state.randn(n_samples, 200 * n_features)]
代码解释
数据集划分并进行模型训练


绘制ROC曲线

代码如下
y_score = classifier.fit(X_train, y_train).decision_function(X_test)
# Compute ROC curve and ROC area for each class
fpr,tpr,threshold = roc_curve(y_test, y_score) #计算真正率和假正率
roc_auc = auc(fpr,tpr) ###计算auc的值
plt.rre()
# lw = 2
plt.figure(figsize=(8,4))
plt.plot(fpr, tpr, color='darkorange',
la正率为纵坐标做曲线
plt.plot([0, 1], [0, 1], color='navy', 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曲线示例')
plt.legend(loc="lower right")
plt.show()
代码解释
创作不易 觉得有帮助请点赞关注收藏~~~
