两个模型评价的曲线(PR曲线和ROC曲线)

我们先来研究:不同分类阈值下,模型的“精确率”和“召回率”变化情况:
可以见我博客:研究随着分类阈值的变化,精确率和召回率的变化-CSDN博客

绘图展示的效果为:

横坐标为分类阈值,纵坐标为精确率和召回率的变化情况。

(1)第一部分:PR曲线

也就是绘制的图像横坐标是precision精确率,纵坐标是recall召回率。

也就是将上述第七部分代码替换如下:

import matplotlib.pyplot as plt
plt.plot(recall_scores, precision_scores)
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.show()

完整代码:

#第一部分:导包
import numpy as np
from sklearn import datasets
#第二部分:加载数据集
iris=datasets.load_iris()
X=iris.data
y=iris.target
#第三部分:分割数据集
#为了简化问题,我们将其转化为二分类问题
y[y!=0]=1
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=666)
#第四部分:训练模型
logreg=LogisticRegression()
logreg.fit(X_train,y_train)
y_pred=logreg.predict(X_test)
#print(y_pred)
#第五部分:获取每一个测试集元素的置信分数
decision_scores=logreg.decision_function(X_test)
#print(decision_scores)正常情况下,我们是以0为分类标准,大于0分类为1,小于0分类为0
# 第六部分:获取精确率,召回率和置信区间
from sklearn.metrics import precision_recall_curve
# 使用 precision_recall_curve 获取不同阈值下的精确率和召回率
precision_scores, recall_scores, thresholds = precision_recall_curve(y_test, decision_scores)

# 第七部分:绘制以上得到的不同精确率和召回率情况
import matplotlib.pyplot as plt
# 绘制精确率和召回率曲线
plt.plot(recall_scores, precision_scores)
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.show()

也可以看到,最优情况的时候,recall和precision都能够达到1

(2)第二部分:ROC曲线

我们现在给recall换个名字:叫做TPR

以疫情检测核酸为例:

那么:

TPR:就是阳性患者里面被误检的概率

FPR:就是代表的是阴性患者里面被误检的概率

下面是代码实现ROC曲线的核心代码:

# 第六部分:获取精确率,召回率和置信区间
from sklearn.metrics import roc_curve
fpr,tpr,threshold=roc_curve(y_test,decision_scores)
# 第七部分:绘制以上得到的不同精确率和召回率情况
import matplotlib.pyplot as plt
# 绘制精确率和召回率曲线
plt.plot(fpr, tpr)
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.show()

完整代码如下:

#第一部分:导包
import numpy as np
from sklearn import datasets
#第二部分:加载数据集
iris=datasets.load_iris()
X=iris.data
y=iris.target
#第三部分:分割数据集
#为了简化问题,我们将其转化为二分类问题
y[y!=0]=1
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=666)
#第四部分:训练模型
logreg=LogisticRegression()
logreg.fit(X_train,y_train)
y_pred=logreg.predict(X_test)
#print(y_pred)
#第五部分:获取每一个测试集元素的置信分数
decision_scores=logreg.decision_function(X_test)
#print(decision_scores)正常情况下,我们是以0为分类标准,大于0分类为1,小于0分类为0
# 第六部分:获取精确率,召回率和置信区间
from sklearn.metrics import roc_curve
fpr,tpr,threshold=roc_curve(y_test,decision_scores)
# 第七部分:绘制以上得到的不同精确率和召回率情况
import matplotlib.pyplot as plt
# 绘制精确率和召回率曲线
plt.plot(fpr, tpr)
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.show()

分析图像:

这个点FPR=0,TPR=1,代表的就是所有反例中没有错误,所有正例中全部正确,最终得到的就是本次检验全部数据都检测的正确。

(3)第三部分:AUC(area under curve)

也就是上述第二部分ROC曲线下面的这块区域的大小,面积越大,roc越高,分类模型越好:

#第八部分:绘制auc曲线
from sklearn.metrics import roc_auc_score
auc=roc_auc_score(y_test,decision_scores)
print(auc)

完整代码:

#第一部分:导包
import numpy as np
from sklearn import datasets
#第二部分:加载数据集
iris=datasets.load_iris()
X=iris.data
y=iris.target
#第三部分:分割数据集
#为了简化问题,我们将其转化为二分类问题
y[y!=0]=1
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=666)
#第四部分:训练模型
logreg=LogisticRegression()
logreg.fit(X_train,y_train)
y_pred=logreg.predict(X_test)
#print(y_pred)
#第五部分:获取每一个测试集元素的置信分数
decision_scores=logreg.decision_function(X_test)
#print(decision_scores)正常情况下,我们是以0为分类标准,大于0分类为1,小于0分类为0
# 第六部分:获取精确率,召回率和置信区间
from sklearn.metrics import roc_curve
fpr,tpr,threshold=roc_curve(y_test,decision_scores)
# 第七部分:绘制以上得到的不同精确率和召回率情况
import matplotlib.pyplot as plt
# 绘制精确率和召回率曲线
plt.plot(fpr, tpr)
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.show()
#第八部分:绘制auc曲线
from sklearn.metrics import roc_auc_score
auc=roc_auc_score(y_test,decision_scores)
print(auc)

auc取值最大值也就是1,代表正确率为100%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还不秃顶的计科生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值