Sök…


Introduktion till ROC och AUC

Exempel på ROC-mätvärde för mottagare för att utvärdera utgångskvaliteten för klassificeraren.

ROC-kurvor har vanligtvis sann positiv hastighet på Y-axeln och falsk positiv hastighet på X-axeln. Detta innebär att plotterns övre vänstra hörn är den "ideala" punkten - en falsk positiv hastighet på noll och en sann positiv hastighet på en. Detta är inte så realistiskt, men det betyder att ett större område under kurvan (AUC) vanligtvis är bättre.

ROC-kurvornas "branthet" är också viktigt eftersom det är idealiskt att maximera den verkliga positiva hastigheten samtidigt som den falska positiva hastigheten minimeras.

Ett enkelt exempel:

import numpy as np
from sklearn import metrics
import matplotlib.pyplot as plt

Godtyckliga y värden - i realiteten är detta de förutsagda målvärdena ( model.predict(x_test) ):

y = np.array([1,1,2,2,3,3,4,4,2,3])

Poäng är den genomsnittliga noggrannheten för de givna testdata och etiketter ( model.score(X,Y) ):

scores = np.array([0.3, 0.4, 0.95,0.78,0.8,0.64,0.86,0.81,0.9, 0.8])

Beräkna ROC-kurvan och AUC:

fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
roc_auc = metrics.auc(fpr, tpr)

plottning:

plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'k--')
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.show()

Produktion:

ange bildbeskrivning här

Obs: källorna togs från dessa länk1 och länk2

ROC-AUC-poäng med överskridande och korsvalidering

Man behöver de förutsagda sannolikheterna för att beräkna ROC-AUC (området under kurvan). cross_val_predict använder predict för klassificerare. För att kunna få ROC-AUC-poäng kan man helt enkelt underklassera klassificeraren och åsidosätta predict , så att den skulle fungera som predict_proba .

from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import cross_val_predict
from sklearn.metrics import roc_auc_score

class LogisticRegressionWrapper(LogisticRegression):
    def predict(self, X):
        return super(LogisticRegressionWrapper, self).predict_proba(X)

X, y = make_classification(n_samples = 1000, n_features=10, n_classes = 2, flip_y = 0.5)

log_reg_clf = LogisticRegressionWrapper(C=0.1, class_weight=None, dual=False,
             fit_intercept=True)

y_hat = cross_val_predict(log_reg_clf, X, y)[:,1]

print("ROC-AUC score: {}".format(roc_auc_score(y, y_hat)))

produktion:

ROC-AUC score: 0.724972396025


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow