ROC曲線としきい値

しきい値を動かしてROC曲線を描いてみる

from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
X = data.data
y = data.target
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)

from sklearn.linear_model import LogisticRegression
clf = LogisticRegression()
clf.fit(X_train, y_train)

from sklearn.metrics import accuracy_score, roc_curve
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix

fprs = []
tprs = []
ths = []
plt.rcParams['figure.figsize'] = [10, 5]
for th in range(-10,10):
    y_pred = (clf.decision_function(X_test)>th).astype(int)
    tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel()
    recall = tp/(fn+tp)
    precision = tp/(tp+fp)
    fpr = fp/(tn+fp)<feff>
    tpr = tp/(fn+tp)
    fprs.append(fpr)
    tprs.append(tpr)
    ths.append(th)

plt.plot(fprs,tprs,'o')

for i in range(len(ths)):
    plt.annotate(str(ths[i]),(fprs[i],tprs[i]),fontsize=20)

f:id:seinzumtode:20211231031500p:plain