准确率 召回率 ROC曲线的大解析

 

近来面试算法、机器学习岗,发现面试官经常问的就是准确率召回率之间的关系,以及roc曲线如何画,这里自己总结了一波做了一波解析。

对于一个二分类的问题来看,可以用下表来表示整个结果,其中1代表正例,0代表负例 
这里写图片描述

接下来我们一个一个来解释 
TP(真正类):表示为被预测为正例实际也是正例。 
FP(假正类):表示被预测为正但是其实是负例。 
FN(假负类):表示为被预测为负其实是正例 
TN(真负): 则表示预测为负,实际也是负 
简易理解:从预测跟实际出发,每个case都有两个意义,一个则是在实际中是正或负,一个则是在预测中是正或负 
TP+FP 则可以表示为被预测为正例的所有case。 
TP+FN 则表示 实际为正的所有case

这时候准确率跟召回率可以很好的写出来了

1、准确率

       Precision = TP/( TP+FP)
  • 1

如何理解?: 准确率是从预测集出发,表示预测为正的case中有多少实际就是正的比率

2、召回率

        recall  = TP/(TP+FN)
  • 1

如何理解?: 召回率是从实际case出发,表示。实际为正的case中有多少 
预测为正的比率。

3、F值

F值主要为了衡量准确跟召回的综合评价指标

F1 = 2rp/(r+p)

4、roc曲线

roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性。

横轴:假正类率(false postive rate FPR)特异度,预测为负实际为正的case占所有负例的比例;(1-Specificity)

纵轴:真正类率(true postive rate TPR)灵敏度,Sensitivity(正类覆盖率),其实就是召回率 
这里写图片描述

如何理解?: 横轴为假正率,即实际为负但预测为正的case占实际所有负例的比率 
纵轴即为召回率 
理想情况下我们会想让假正率越来越小,召回率越来越高,最理想的情况则是fpr = 0,tpr = 1.

考虑两种极端情况,对于logistics二分类问题, 
(1)将阈值设为0时,即所有case都预测成正例 
这种情况下召回为1 (因为实际为正的case肯定会被预测为正,即没有正例会被预测成负例),假正率则为1(因为没有真负例的存在),坐标则为(1,1) 
(2)将阈值设为1时,则所有的case都被预测成负例 
这种情况下召回率为0,(因为没有case被预测成正),假正率为0,坐标为(0,0)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是随机森林预测的Python代码,实现多个特征变量、一个预测结果的分类任务。代码使用了Excel作为输入和输出文件格式,可以指定验证集和训练集比例,并计算了精度、准确率召回和F1值,绘制了AUC曲线图、ROC曲线图、混淆矩阵热力图,并解析了评价结果。 ```python import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_curve, auc, confusion_matrix import seaborn as sns import matplotlib.pyplot as plt # 读取数据 data = pd.read_excel('data.xlsx') # 将数据分为训练集和验证集 train_ratio = 0.8 # 训练集比例 train_data = data.sample(frac=train_ratio, random_state=1) test_data = data.drop(train_data.index) # 定义特征变量和目标变量 features = ['feature1', 'feature2', 'feature3'] target = 'target' # 训练随机森林模型 n_estimators = 100 # 决策树数目 rf = RandomForestClassifier(n_estimators=n_estimators, random_state=1) rf.fit(train_data[features], train_data[target]) # 在验证集上进行预测并计算精度、准确率召回和F1值 pred = rf.predict(test_data[features]) accuracy = accuracy_score(test_data[target], pred) precision = precision_score(test_data[target], pred) recall = recall_score(test_data[target], pred) f1 = f1_score(test_data[target], pred) print('Accuracy:', accuracy) print('Precision:', precision) print('Recall:', recall) print('F1 Score:', f1) # 计算并绘制ROC曲线和AUC值 fpr, tpr, thresholds = roc_curve(test_data[target], pred) roc_auc = auc(fpr, tpr) print('AUC:', roc_auc) plt.figure() lw = 2 plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=lw, 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() # 计算并绘制混淆矩阵热力图 confusion_mat = confusion_matrix(test_data[target], pred) print('Confusion matrix:') print(confusion_mat) sns.heatmap(confusion_mat, annot=True) plt.show() # 读取新数据文件并预测结果 new_data = pd.read_excel('new_data.xlsx') new_pred = rf.predict(new_data[features]) new_data['predicted_target'] = new_pred new_data.to_excel('predicted_results.xlsx', index=False) ``` 评价结果解析: - 精度(Accuracy):分类正确的样本数占总样本数的比例。 - 准确率(Precision):真正例(TP)占预测正例(TP+FP)的比例,表示预测为正例的样本中真正是正例的比例。 - 召回(Recall):真正例(TP)占实际正例(TP+FN)的比例,表示实际为正例的样本中被正确预测为正例的比例。 - F1值:综合考虑准确率召回的指标,取值范围为0到1,F1值越大,表示模型预测效果越好。 - AUC:ROC曲线下的面积,取值范围为0到1,AUC越大,表示模型的分类效果越好。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值