2017-11-12 3 views
-1

Ich habe die folgenden Maschinen Pipeline in Python mit verschachtelter Kreuzvalidierung Lernen:Erste Wahrscheinlichkeiten von cross_val_score

from sklearn.model_selection import StratifiedShuffleSplit 
from sklearn.svm import SVC 
sss_outer = StratifiedShuffleSplit(n_splits=5, test_size=0.4, random_state=15) 
sss_inner = StratifiedShuffleSplit(n_splits=3, test_size=0.2, random_state=16) 
pipe_svm = Pipeline([('scl', StandardScaler()), ('clf', SVC(kernel="linear"))]) 
parameters = {'clf__C': logspace(-4, 1, 50)} 
grid_search = GridSearchCV(estimator=pipe_svm, param_grid=parameters, verbose=1, scoring='roc_auc', cv=sss_inner) 
cross_val_score(grid_search, X, y, cv=sss_outer) 

Jetzt würde ich Wahrscheinlichkeiten wie aus cross_val_score zu bekommen, so dass ich die AUC berechnen und zeichnen die ROC und Präzision/Rückrufkurve. Wie kann das gemacht werden?

+0

Haben Sie versucht: 'cross_val_score (grid_search, X, y, cv = sss_outer, scoren = 'roc_auc')' –

+0

Ja, aber dann bekomme ich nur die AUC als Ergebnis, aber ich kann die ROC und Präzision nicht plotten/Rückrufkurve. – machinery

Antwort

2

können Sie verwenden, um die sklearn.metrics.roc_curve Funktion der ROC-Score des Modells

Hier ist ein Beispiel-Code-Snippet-Klassifikator mit SVM zu berechnen:

from sklearn.model_selection import StratifiedShuffleSplit 
from sklearn.svm import SVC 
from sklearn.metrics import roc_curve, auc 

X = { 
    "train": [...], 
    "text": [...] 
} 


Y = { 
    "train": [...], 
    "text": [...] 
} 

sss_outer = StratifiedShuffleSplit(n_splits=5, test_size=0.4, random_state=15) 
sss_inner = StratifiedShuffleSplit(n_splits=3, test_size=0.2, random_state=16) 

pipe_svm = Pipeline([('scl', StandardScaler()), ('clf', SVC(kernel="linear"))]) 
parameters = {'clf__C': logspace(-4, 1, 50)} 
grid_search = GridSearchCV(estimator=pipe_svm, param_grid=parameters, verbose=1, scoring='roc_auc', cv=sss_inner) 

probas_ = grid_search.fit(X[train], y[train]).predict_proba(X[test]) 
fpr, tpr, thresholds = roc_curve(y[test], probas_[:, 1]) 
roc_auc = auc(fpr, tpr) 

Sie können auch sklearn Beispiel erreichen: Receiver Operating Characteristic (ROC) with cross validation für mehr Einzelheiten. Hoffe es hilft.

+0

Vielen Dank. Ihr Beispiel verwendet ein separates Trainings- und Testset ("Train" und "Test"). Damit habe ich dann eine Art doppelt verschachtelte Kreuzvalidierung. Ist es auch möglich, auf dieses explizite Trainings- und Testset nur mit verschachtelter Kreuzvalidierung zu verzichten? – machinery

Verwandte Themen