本文为原创文章,未经本人允许,禁止转载。转载请注明出处。
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
返回的fpr
、tpr
、thresholds
均为数组。
👉绘制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