Python-XGBoost算法中绘制AUC-ROC曲线图

简单记录一下auc-roc的思想:

  • 利用机器学习算法处理分类问题时,主要是通过测试样本产生的实值与预测概率来解决问题。随后将预测值与阈值进行比较。
    阈值可以被看作为一个门槛,高于门槛为true,反之为false。

  • 同时,由于测试样本时产生的是一个概率,可以对概率进行排序,确定最可能为True的样本排在前面,最不可能为True的样本排在后面。在排序额度过程中存在一个cut point。排在cut point前为正例。

  • 如果我们更重视“查准率”,则可选择排序中靠前的位置进行截断;若更重视“查全率”,则可以选择靠后的位置进行截断。因此,排序本身的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏。ROC曲线是从这个角度出发来研究学习器泛化性能的有力工具。

当然,Sklearn的官方文档也有很多对ROC的介绍和实力,感兴趣的朋友可以移步➡️https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html#sphx-glr-auto-examples-model-selection-plot-roc-py

注:上述内容可通过周志华老师的西瓜书查看。

总体而言,该metric的实现非常简单,代码在操作上除了需要注意np数据的转换应该不会存在什么大问题。
本人在实例中的操作⬇️

1.调包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
from sklearn.metrics import roc_auc_score
from sklearn import metrics

2.读数据
binary_data = pd.read_excel('/Users/Macbook/Desktop/规模预测/data/binary_data.xlsx')
X = binary_data[['Feature1','Feature2','Feature3','Feature4','Feature5']]
y = binary_data['Veracity']
#注意要将数据转换为numpy数值
X_train, X_test, y_train, y_test = train_test_split(np.array(X),np.array(y), test_size=0.4,random_state = 0)

3.拟合模型
model = XGBClassifier()
model = model.fit(X_train, y_train)
y_pred = model.predict(X_test)
y_pred_proba = model.predict_proba(X_test)
fpr, tpr, thresholds = metrics.roc_curve(y_test,y_pred_proba[:,1], pos_label=1)
roc_auc = metrics.auc(fpr,tpr)

4.绘图
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 example")
plt.legend(loc="lower right")
plt.savefig('auc_roc.pdf')
plt.show()

你可能感兴趣的:(Python学习,python,算法,sklearn)