2017-07-28 3 views
2

Ich versuche ROC-Kurve und AUROC-Kurve für Entscheidungsbaum zu finden. Mein Code war so etwas wieWie bekomme ich die ROC-Kurve für den Entscheidungsbaum?

clf.fit(x,y) 
y_score = clf.fit(x,y).decision_function(test[col]) 
pred = clf.predict_proba(test[col]) 
print(sklearn.metrics.roc_auc_score(actual,y_score)) 
fpr,tpr,thre = sklearn.metrics.roc_curve(actual,y_score) 

Ausgang:

Error() 
'DecisionTreeClassifier' object has no attribute 'decision_function' 

im Grunde, der Fehler kommt, während die y_score zu finden. Bitte erklären Sie, was y_score ist und wie Sie dieses Problem lösen können.

Antwort

4

Zunächst hat die DecisionTreeClassifierkeine Attribut decision_function.

Wenn ich von der Struktur des Codes erraten, haben Sie diese example

In diesem Fall wird der Klassifikator nicht der Entscheidungsbaum ist, aber es ist die OneVsRestClassifier, die die decision_function Methode unterstützt.

Sie können die verfügbaren Attribute DecisionTreeClassifierhere

Eine mögliche Art und Weise sehen, es zu tun ist, um binarisieren den Klassen und dann die auc für jede Klasse berechnen:

Beispiel:

from sklearn.metrics import roc_curve, auc 
from sklearn.model_selection import train_test_split 
from sklearn.preprocessing import label_binarize 
from sklearn.tree import DecisionTreeClassifier 
from scipy import interp 


iris = datasets.load_iris() 
X = iris.data 
y = iris.target 

y = label_binarize(y, classes=[0, 1, 2]) 
n_classes = y.shape[1] 

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.5, random_state=0) 

classifier = DecisionTreeClassifier() 

y_score = classifier.fit(X_train, y_train).predict(X_test) 

fpr = dict() 
tpr = dict() 
roc_auc = dict() 
for i in range(n_classes): 
    fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i]) 
    roc_auc[i] = auc(fpr[i], tpr[i]) 

# Compute micro-average ROC curve and ROC area 
fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_score.ravel()) 
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"]) 

#ROC curve for a specific class here for the class 2 
roc_auc[2] 

Ergebnis

0.94852941176470573 
0

Denken Sie, dass für einen Entscheidungsbaum Sie .predict_proba() anstelle von .decision_function verwenden können(), so werden Sie etwas wie unten erhalten:

y_score = classifier.fit(X_train, y_train).predict_proba(X_test) 

Dann wird der Rest des Codes wird die gleich. Tatsächlich kann die roc_curve-Funktion von scikit learn zwei Arten von Eingaben annehmen: "Ziel-Scores, können entweder Wahrscheinlichkeitsschätzungen der positiven Klasse, Konfidenzwerte oder nicht-resultierte Entscheidungsmaße sein (wie von" decision_function "zurückgegeben) einige Klassifikatoren). " Weitere Informationen finden Sie unter here.

Verwandte Themen