【Python基础】第三十五课:ROC曲线

LabelEncoder,predict_proba,roc_curve,auc

Posted by x-jeff on March 24, 2022

本文为原创文章,未经本人允许,禁止转载。转载请注明出处。

1.使用Python计算ROC曲线

ROC和AUC的相关介绍见:ROC与AUC

👉载入必要的包:

1
2
3
4
5
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve

👉数据读取与编码转换:

1
2
3
4
5
iris = load_iris()
X = iris.data[50:150, ]

le = preprocessing.LabelEncoder()
y = le.fit_transform(iris.target[50:150])

LabelEncoder将类别标签进行编码(0~类别-1):

1
2
3
4
5
6
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit([1, 2, 2, 6])
le.classes_ # output : array([1, 2, 6])
le.transform([1, 1, 2, 6]) # output : array([0, 0, 1, 2])
le.inverse_transform([0, 0, 1, 2]) # output : array([1, 1, 2, 6])

也可以应用于字符串:

1
2
3
4
5
le = preprocessing.LabelEncoder()
le.fit(["paris", "paris", "tokyo", "amsterdam"])
list(le.classes_) # output : ['amsterdam', 'paris', 'tokyo']
le.transform(["tokyo", "tokyo", "paris"]) # output : array([2, 2, 1])
list(le.inverse_transform([2, 2, 1])) # output : ['tokyo', 'tokyo', 'paris']
  • le.fit:Fit label encoder。
  • le.fit_transform:Fit label encoder and return encoded labels。

👉建立预测模型:

1
2
3
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.33, random_state=123)
clf = DecisionTreeClassifier()
clf.fit(train_X, train_y)

train_test_split用法见:【Python基础】第三十四课:模型评估方法

DecisionTreeClassifier()用法见:【Python基础】第二十七课:分类模型之决策树

👉计算ROC Curve参数:

1
2
3
4
probas_ = clf.fit(train_X, train_y).predict_proba(test_X)
probas_[:, 1]

fpr, tpr, thresholds = roc_curve(test_y, probas_[:, 1])

predict_proba返回的是一个n行k列的数组,第i行第j列上的数值是模型预测第i个样本为第j个类别的概率,每一行的概率和为1。

roc_curve返回的fprtprthresholds均为数组。

👉绘制ROC Curve:

1
2
3
4
5
6
7
8
9
10
11
import matplotlib.pyplot as plt

plt.plot(fpr, tpr, label='ROC curve')
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc='lower right')
plt.show()

👉计算AUC分数:

1
2
3
from sklearn.metrics import auc

roc_auc = auc(fpr, tpr) # roc_auc=0.876838

2.代码地址

  1. ROC曲线

3.参考资料

  1. sklearn中predict_proba用法(注意和predict的区别)