一个主机 多个网站,重庆百度优化,建设银行网站无法打开,wordpress 图片自动加水印参考 机器学习-ROC曲线 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/347470776一文看懂ROC、AUC - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/81202617 在了解之前#xff0c;我们先来认识一下以下的概念
针对一个二分类问题#xff0c;将实例分成正类(postive)或… 参考 机器学习-ROC曲线 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/347470776一文看懂ROC、AUC - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/81202617 在了解之前我们先来认识一下以下的概念
针对一个二分类问题将实例分成正类(postive)或者负类(negative)。但是实际中分类时会出现四种情况:
(1)TP(True Postive):是正类并且被预测为正类
(2)FN(False Negative):是正类但是被预测成为负类
(3)FP(False Postive):是负类但是被预测成为正类
(4)TN(True Negative):是负类但是被预测成为负类 1.ROC曲线的定义
ROC的全称是Receiver Operating Characteristic Curve中文名字叫“受试者工作特征曲线”顾名思义其主要的分析方法就是画这条特征曲线。
它显示了在不同阈值下真正例率True Positive Rate也称为召回率与假正例率False Positive Rate之间的关系。
横轴假正类率 (false postive rate, FPR)特异度划分实例中所有负例占所有负例的比例TNR1-FPR。
纵轴真正类率 Recall(true postive rate, TPR)灵敏度Sensitivity(正类覆盖率)
ROC 曲线中横轴和纵轴的含义以及与阈值的关系。 阈值 举一个雷达兵的例子。每一个雷达兵用的都是同一台雷达返回的结果但是每一个雷达兵内心对其属于敌军轰炸机的判断是不一样的可能1号兵解析后认为结果大于0.9就是轰炸机2号兵解析后认为结果大于0.85就是轰炸机依次类推每一个雷达兵内心都有自己的一个判断标准也即对应分类器的不同“阈值”这样针对每一个雷达兵都能计算出一个ROC曲线上的关键点一组FPR,TPR值把大家的点连起来也就是最早的ROC曲线了。 当改变分类器的阈值时会影响到对正例和负例的界定从而影响到分类器的性能。
一般来说降低阈值会增加真正例率TPR但也会导致增加假正例率FPR。ROC 曲线展示了在不同阈值下这种权衡关系。
具体来说当阈值设定得很低时分类器可能会将大部分样本判定为正例这会提高真正例率TPR但也会导致增加假正例率FPR。
相反当阈值设定得很高时分类器可能只将少数样本判定为正例这会降低真正例率TPR但也会导致减少假正例率FPR。
ROC 曲线展示了在所有可能阈值下 TPR 和 FPR 的变化情况帮助我们理解分类器在不同判定标准下的性能表现。
ROC曲线绘制了在不同阈值下的TPR和FPR之间的折衷关系。曲线越靠近左上角0,1处分类器性能越好因为在这个点处TPR最大而FPR最小。
AUCArea Under the Curve是ROC曲线下的面积用来衡量分类器性能的一个数值。AUC值的范围在0到1之间完美分类器的AUC值为1随机猜测的分类器的AUC值为0.5。 2. 代码演示
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve, roc_auc_score
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt# 生成模拟数据集
X, y make_classification(n_samples1000, n_features20, n_classes2, random_state42)# 将数据集分割为训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 构建分类模型这里以逻辑回归为例
model LogisticRegression()
model.fit(X_train, y_train)# 获取预测概率
y_pred_proba model.predict_proba(X_test)[:, 1]# 计算 ROC 曲线的各项指标
fpr, tpr, thresholds roc_curve(y_test, y_pred_proba)
auc roc_auc_score(y_test, y_pred_proba)# 绘制 ROC 曲线
plt.figure(figsize(8, 6))
plt.plot(fpr, tpr, labelfROC curve (AUC {auc:.2f}), colororange)
plt.stackplot(fpr, tpr, colorskyblue, alpha0.3) # 添加阴影效果
plt.text(0.6, 0.4, fAUC {auc:.3f}, fontdictdict(size12)) # 添加文本标签
plt.plot([0, 1], [0, 1], k--)
plt.xlabel(False Positive Rate)
plt.ylabel(True Positive Rate)
plt.title(Receiver Operating Characteristic (ROC) Curve)
plt.legend(loclower right)
plt.show()print(fAUC值为: {auc:.4f})
结果展示 3. 一些其他地模型评估参数
a. 准确率(Accuracy)
所有预测正确的和所有test集的比例 b. 精确率Precision
也称为查准率表示分类器预测为正类别的样本中有多少确实属于正类别的比例。
计算公式为Precision TP / (TP FP) c.召回率Recall)
也称为查全率或灵敏度表示实际为正类别的样本中被分类器预测为正类别的比例。
计算公式为Recall TP / (TP FN) d.F1分数F1-score
是精确率和召回率的调和平均值综合考虑了两者的性能。
F1-score的取值范围在0到1之间是精确率和召回率的平衡指标。
计算公式为F1-score 2 * (Precision * Recall) / (Precision Recall)。