机器学习:绘制PR曲线

机器学习:绘制PR曲线与ROC曲线

1、PR曲线与ROC曲线的定义

在了解两条曲线之前,先来看下如下的混淆矩阵

预测结果+1-1
真实结果
+1TP(真正例)FN(伪反例)
-1FP(伪正例)TN(真反例)

在一个二分类问题中

把正例正确判定为正例,表示为TP(true positive)

把正例错误判定为负例,表示为FN(false negative)

把负例正确判定为负例,表示为TN(true negative)

把负例错误判定为正例,表示为FP(false positive)

通过混淆矩阵可以计算出精确率precision 召回率recall :
P r e c i s i o n = T P / ( T P + F P ) Precision=TP/(TP+FP) Precision=TP/(TP+FP)

R e c a l l = T P / ( T P + F N ) Recall=TP/(TP+FN) Recall=TP/(TP+FN)

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

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

Precision的具体含义其实就是预测为正例的样本中预测正例中所占的比例。

Recall的具体含义就是预测正确的正例的样本在所有真正正例样本中的比例。

TPR的具体含义就是预测正确的正例样本在所有真正正例样本中的比例,跟Recall一样。

TFR的具体含义就是预测正确的反例样本在所有真正反例样本中的比例。

PR曲线

P-R曲线就是Precision与Recall以这两个度量标准分别为纵轴跟横轴绘制的一条曲线,表示在所取的阈值不一样时,对应的precision值与recall值,然后构成一条曲线,要构造一个precision大或者recall大的分类器较为容易,但是比较难保证两者同时成立。

image-20221102230101182

上图所示三条PR曲线中,当Precision=Recall时,取得平衡点(BEP),平衡点越外侧时,此PR曲线对应的学习器效果更好,拥有相对更大的Precision与Recall,所以PR曲线更接近于外侧(或者将另一曲线围住)的学习器效果也是更好的,用上面的图来说,就是曲线C的效果最差,B较好,A是最佳的,A曲线与B曲线有交叉,则可计算重叠面积来比较,明显A的效果比B好。

ROC曲线

ROC代表接收者操作特征(receiver operating characterrestic)

ROC曲线绘图过程与PR曲线类似,就是横轴,纵轴的度量发生变化,横轴是FPR,纵轴是TPR

image-20221103161910066

对于ROC曲线的比较标准,常用AUC(Area Unser the Curve)来评价,即曲线下的面积,这个指标给出的是分类器的平均性能值,并不能代替对整条曲线的观察,一个完美的分类器AUC为1.0而随机猜测的AUC为0.5。

PR曲线与ROC曲线的绘制

使用sklearn里的sklearn.metrics.precision_recall_curve()与sklearn.metrics.roc_curve来绘制PR曲线,参考博客_precision_recall_curve

其中y_true是样本的标签,y_score是样本的置信度

样本设置如下

y_true = [0, 0, 1, 1, 0, 1]
y_score = [0.1, 0.4, 0.35, 0.8, 0.6 ,0.55]

from sklearn.metrics import precision_recall_curve
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt


y_true = [0, 0, 1, 1, 0, 1]
y_score = [0.1, 0.4, 0.35, 0.8, 0.6 ,0.55]
 
 
precision, recall, thresholds = precision_recall_curve(y_true, y_score)
#print(precision)
#print(recall)
#print(thresholds)

plt.plot(precision, recall)
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.show()


fpr, tpr, thresholds = roc_curve(y_true, y_score, pos_label=1)
plt.plot(tpr, fpr)
plt.xlabel('TPR')
plt.ylabel('FPR')
plt.show()

image-20221103233359483

image-20221103234144200

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是机器学习Python绘制PR曲线的示例代码: ```python from sklearn.metrics import precision_recall_curve import matplotlib.pyplot as plt import numpy as np y_true = np.array([0, 0, 1, 1, 1]) y_scores = np.array([0.1, 0.4, 0.35, 0.8, 0.9]) precision, recall, thresholds = precision_recall_curve(y_true, y_scores) plt.plot(recall, precision, linestyle='--', label='PR curve') plt.xlabel('Recall') plt.ylabel('Precision') plt.legend() plt.show() ``` 其中,y_true表示真实标签,y_scores表示模型输出的预测概率。precision_recall_curve函数会返回一组精确率、召回率和阈值,我们将这些数据绘制PR曲线即可。 ### 回答2: PR曲线是二元分类模型性能评估的重要指标之一,它可以衡量出在"有多少真实的数据预测成正样本的同时预测对了多少个真实的正样本"的性能,适用于不平衡数据集的情况。 在Python中,我们可以利用sklearn库,调用precision_recall_curve()函数绘制PR曲线。具体步骤如下: 1. 导入必要的库 ``` import matplotlib.pyplot as plt from sklearn.metrics import precision_recall_curve from sklearn.metrics import plot_precision_recall_curve ``` 2. 准备数据集 假设我们有一个二分类数据集,标签为1表示正样本,标签为0表示负样本。我们可以从csv文件中读取数据,或者利用一些数据生成的方法。 ``` X, y = make_classification(n_samples=10000, n_classes=2, weights=[0.95,0.05], random_state=42) ``` 3. 拆分数据集 由于绘制PR曲线需要使用测试集,所以我们需要把数据集拆分成训练集和测试集。 ``` from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 4. 训练模型 利用我们选择的二分类模型,例如Logistic回归或者随机森林模型等,从训练数据集中训练一个模型。 ``` from sklearn.ensemble import RandomForestClassifier clf = RandomForestClassifier(n_estimators=100, random_state=42) clf.fit(X_train, y_train) ``` 5. 绘制PR曲线 利用precision_recall_curve()函数计算每个阈值下的准确率和召回率,然后绘制PR曲线。 ``` disp = plot_precision_recall_curve(clf, X_test, y_test) plt.show() ``` 以上是用Python绘制PR曲线的基本步骤,你可以根据实际需要进行微调和优化。 ### 回答3: PR曲线机器学习中用于评估二分类模型性能的重要指标之一。它是Precision与Recall的关系曲线,通过绘制Precision与Recall的关系曲线可以更直观、准确地评估模型性能。在Python中,我们可以使用Scikit-Learn库的以下函数来绘制PR曲线: from sklearn.metrics import precision_recall_curve import matplotlib.pyplot as plt # 假设y_true为真实标签,y_scores为分类模型输出的概率值 precision, recall, thresholds = precision_recall_curve(y_true, y_scores) # 绘制PR曲线图 plt.plot(recall, precision, label='PR curve') plt.xlabel('Recall') plt.ylabel('Precision') plt.title('Precision-Recall Curve') plt.legend(loc='best') plt.show() 其中,y_true为真实标签,y_scores为分类模型输出的概率值。函数precision_recall_curve可以返回precision、recall以及每个阈值的数值,即thresholds,这些数值可以用于后续的计算或可视化操作。绘制PR曲线使用Matplotlib库的plot函数,将recall作为横坐标、precision作为纵坐标,即可得到PR曲线。对于PR曲线的图像优化可以用title函数来添加标题,用xlabel和ylabel函数进行轴标签的添加以及legend函数添加图例。最后将PR曲线图用show函数显示。 绘制PR曲线,是对模型在正例(positive)和负例(negative)两个方面的表现都进行评估的一种方法,可以帮助用户更准确地判断模型的性能,具有重要的应用价值和研究意义。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值