乐趣区

关于机器学习:模型性能分析ROC-分析和-AUC

本文将介绍模型性能剖析的两个办法:ROC & AUC。

ROC 剖析和曲线下面积 (AUC) 是数据迷信中宽泛应用的工具,借鉴了信号处理,用于评估不同参数化下模型的品质,或比拟两个或多个模型的性能。

传统的性能指标,如准确率和召回率,在很大水平上依赖于正样本的察看。因而,ROC 和 AUC 应用真阳性率和假阳性率来评估品质,同时思考到侧面和负面察看后果。

从合成问题到应用机器学习解决问题的过程有多个步骤。它波及数据收集、清理和特色工程、构建模型,最初是,评估模型性能。

当您评估模型的品质时,通常会应用精度和召回率等指标,也别离称为数据挖掘畛域的置信度和灵敏度。

这些指标将预测值与通常来自保留集的理论察看值进行比拟,应用混同矩阵进行可视化。

让咱们首先关注精度,也称为阳性预测值。应用混同矩阵,您能够将 Precision 构建为所有实在阳性与所有预测阳性的比率。

召回率,也称为真阳性率,示意真阳性与察看到的和预测的所有阳性的比率。

应用混同矩阵中的不同察看集来形容 PrecisionRecall,您能够开始理解这些指标如何提供模型性能的视图。

值得注意的是 Precision 和 Recall 只关注正例和预测,而不思考任何负例。此外,他们不会将模型的性能与中值场景进行比拟,中值场景只是随机猜想。

1. ROC 曲线

ROC 作为汇总工具,用于可视化 Precision 和 Recall 之间的衡量。ROC 剖析应用 ROC 曲线来确定二进制信号的值有多少被噪声污染,即随机性。它为间断预测器提供了一系列操作点的灵敏度和特异性摘要。ROC 曲线是通过绘制 x 轴上的假阳性率与 y 轴上的真阳性率来取得的。

因为真阳性率是检测信号的概率,而假阳性率是误报的概率,因而 ROC 剖析也宽泛用于医学钻研,以确定牢靠地检测疾病或其余行为的阈值。

一个完满的模型将具备等于 1 的误报率和真阳性率,因而它将是 ROC 图左上角的单个操作点。而最差的可能模型将在 ROC 图的左下角有一个繁多的操作点,其中误报率等于 1,真阳性率等于 0。

随机猜想模型有 50% 的机会正确预测后果,因而假阳性率将始终等于真阳性率。这就是为什么图中有一条对角线,代表检测信号与噪声的概率为 50/50。

2. AUC 面积

要全面剖析 ROC 曲线并将模型的性能与其余几个模型进行比拟,您实际上须要计算曲线下面积 (AUC),在文献中也称为 c 统计量。曲线下面积 (AUC) 的值介于 0 和 1 之间,因为曲线绘制在 1×1 网格上,并且与信号实践平行,它是信号可检测性的度量。

这是一个十分有用的统计数据,因为它能够让咱们理解模型对实在察看后果和谬误察看后果的排名有多好。它实际上是 Wilcoxon-Mann-Whitney 秩和测验的归一化版本,它测验零假如,其中两个有序测量样本是从单个散布 中抽取的。

要绘制 ROC 曲线并计算曲线下面积 (AUC),您决定应用 SckitLearn 的 RocCurveDisplay 办法并将多层感知器与随机森林模型进行比拟,以尝试解决雷同的分类工作。

import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score, RocCurveDisplay

def plot_roc(model, test_features, test_targets):
    """Plotting the ROC curve for a given Model and the ROC curve for a Random Forests Models"""

    # comparing the given model with a Random Forests model
    random_forests_model = RandomForestClassifier(random_state=42)
    random_forests_model.fit(train_features, train_targets)

    rfc_disp = RocCurveDisplay.from_estimator(random_forests_model, test_features, test_targets)
    model_disp = RocCurveDisplay.from_estimator(model, test_features, test_targets, ax=rfc_disp.ax_)
    model_disp.figure_.suptitle("ROC curve: Multilayer Perceptron vs Random Forests")

    plt.show()

# using perceptron model as input
plot_roc(ml_percetron_model, test_features, test_targets)

欢送 Star -> 学习目录


本文由 mdnice 多平台公布

退出移动版