评估指标:混淆矩阵、PR、mAP、ROC、AUC

TP、TN、FP、FN

  • TP,即 True Positive,预测为正样本,实际也为正样本的特征数。

  • TN,即 True Negative,预测为负样本,实际也为负样本的特征数。

  • FP,即 False Positive,预测为正样本,实际为负样本的特征数。

  • FN,即 False Negative,预测为负样本,实际为正样本的特征数。

准确率 Accuracy 和 错误率 Error rate

  • Accuracy 即准确率:

    A c c u r a c y = T P + T N P + N Accuracy = \frac{TP+TN} {P+N} Accuracy=P+NTP+TN

  • Error rate 即错误率(误差):

    E r r o r r a t e = F P + F N P + N Error rate= \frac{FP+FN} {P+N} Errorrate=P+NFP+FN

  • 对某一个实例来说,分对与分错是互斥事件,所以:

    A c c u r a c y = 1 − E r r o r r a t e Accuracy =1 - Error rate Accuracy=1Errorrate

混淆矩阵 confusion matrix

混淆矩阵(confusion matrix),也被称为错误矩阵(error matrix),是大小为 (n_classes, n_classes) 的方阵。使用混淆矩阵可以清楚地看到分类误差的具体情况。

二分类的混淆矩阵:

多分类的混淆矩阵:

查准率 Precision 和 召回率 Recall

  • 查准率指,对于所有预测为阳性的样本,有多大比率是真阳性。

    真 阳 性 的 数 量 预 测 值 为 阳 性 的 数 量 = T P T P + F P \frac{真阳性的数量} {预测值为阳性的数量} = \frac{TP} {TP+ FP} =TP+FPTP

    查准率越高就越好。

  • 召回率指,对于所有阳性样本,有多大比率被正确预测为阳性。

    真 阳 性 的 数 量 实 际 阳 性 的 数 量 = T P T P + F N \frac{真阳性的数量} {实际阳性的数量} = \frac{TP} {TP + FN} =TP+FNTP

    同样地,召回率越高越好。

  • 对于偏斜类,使用查准率和召回率可以更好地评估算法的分类效果。

  • A 类目标的 Precision 就是在识别出来所有 A 目标中,识别正确的比率。查准率:找的对

  • A 类目标的 Recall 就是在测试集里所有的 A目标中,识别正确的比率。召回率:找的全

PR 曲线

  • PR 曲线,即 Precision-Recall curve

  • 以召回率 Recall 为横轴

  • 以查准率 Precision 为纵轴

AP 和 mAP

在目标检测中,检测出来的候选框包含 score 和 bbox,按照 score 降序排序:

  • TP 为 IoU > 0.5 的检测框数量(同一个 Ground Truth 只计算一次)。

  • FP 为 IoU <= 0.5 的检测框,重复检测到的 bbox 也算FP。

  • FN 为没有检测到的 GT 的数量。

  • PR 曲线为不同置信度阈值下的查准率和召回率情况。

  • AP 为单个类别的检测精度,即 Average Precision,为 PR 曲线下方的面积。

    详见:VOC 2012

    在VOC2010以前,只需要选取当 Recall >= 0, 0.1, 0.2, …, 1 共11个点时的 Precision 最大值,然后AP就是这11个Precision的平均值。

    在 VOC2010 及以后,需要针对每一个不同的 Recall 值(包括0和1),选取其大于等于这些 Recall 值时的 Precision 最大值,然后计算PR曲线下面积作为AP值。

  • mAP,即 mean Average Precision,对所有类别的 AP 取平均值

ROC 曲线

  • ROC空间,以 FPR 为 X 轴,以 TPR 为 Y 轴。

  • 横轴 FPR,即所有实际为阴性的样本中,被错误地判断为阳性之比率:

    F P R = F P / ( F P + T N ) FPR=FP/(FP+TN) FPR=FP/(FP+TN)

  • 纵轴 TPR,即召回率 Recall,即所有实际为阳性的样本中,被正确地判断为阳性之比率。:

    T P R = T P / ( T P + F N ) TPR=TP/(TP+FN) TPR=TP/(TP+FN)

  • 完美的预测是一个在左上角的点,在 ROC 空间座标 (0,1)点,X=0 代表着没有伪阳性,Y=1 代表着没有伪阴性(所有的阳性都是真阳性);也就是说,不管分类器输出结果是阳性或阴性,都是100%正确。

  • 一个随机的预测会得到位于从 (0, 0) 到 (1, 1) 对角线(也叫无识别率线)上的一个点。

ROC 曲线下面积 AUC

Area under the Curve of ROC (AUC) ,即 ROC 曲线下方的面积。

在比较不同的分类模型时,可以将每个模型的 ROC 曲线都画出来,比较曲线下面积做为模型优劣的指标:

  • AUC = 1,是完美分类器,分类100% 正确。

  • 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

  • AUC = 0.5,跟随机猜测一样,模型没有预测价值。

  • AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,信用违约检测是一个二分类问题,可以使用Fisher判别分析来进行建模。下面是一个简单的示例代码,包括数据预处理、模型训练和评估部分。 需要注意的是,本示例仅供参考,实际使用中需要根据具体情况进行修改和优化。 ``` import pandas as pd from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn.metrics import confusion_matrix, roc_curve, auc import matplotlib.pyplot as plt # 读取数据 data = pd.read_csv('credit.csv') # 数据预处理 X = data.iloc[:, :-1].values y = data.iloc[:, -1].values y = [1 if i == 'Y' else 0 for i in y] # 将标签转换为0/1 n_samples, n_features = X.shape # 分割数据集 train_size = int(n_samples * 0.7) X_train, X_test = X[:train_size], X[train_size:] y_train, y_test = y[:train_size], y[train_size:] # 创建Fisher判别分析模型并拟合数据 lda = LinearDiscriminantAnalysis(n_components=1) X_lda_train = lda.fit_transform(X_train, y_train) X_lda_test = lda.transform(X_test) # 模型评估 y_pred = lda.predict(X_test) conf_mat = confusion_matrix(y_test, y_pred) fpr, tpr, thresholds = roc_curve(y_test, lda.decision_function(X_lda_test)) roc_auc = auc(fpr, tpr) # 可视化混淆矩阵ROC曲线 plt.figure(figsize=(10, 4)) plt.subplot(121) plt.imshow(conf_mat, cmap='Blues') plt.colorbar() plt.xlabel('Predicted labels') plt.ylabel('True labels') plt.xticks([0, 1], ['No', 'Yes']) plt.yticks([0, 1], ['No', 'Yes']) plt.title('Confusion Matrix') plt.subplot(122) 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('Receiver Operating Characteristic') plt.legend(loc="lower right") plt.show() ``` 上述代码中,数据集为`credit.csv`,标签列为最后一列,取值为`Y`或`N`。首先对标签进行处理,将`Y`转换为1,将`N`转换为0。然后将数据集分为训练集和测试集,使用Fisher判别分析模型对训练集进行拟合,并在测试集上进行预测和评估。 最后,使用`confusion_matrix()`函数计算混淆矩阵,使用`roc_curve()`函数计算ROC曲线上的FPR和TPR,使用`auc()`函数计算AUC值。通过可视化混淆矩阵ROC曲线,可以直观地展示模型的性能。 需要注意的是,本示例中使用的是单个特征进行建模,实际使用中可能需要使用多个特征,并进行特征选择和调参等过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值