ich mit Multi-Label-Klassifizierung mit OneVsRestClassifier
und SVC
,Sklearn: Beurteilen Sie die Leistung eines jeden Klassifikator von OneVsRestClassifier innerhalb GridSearchCV
from sklearn.datasets import make_multilabel_classification
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import SVC
from sklearn.grid_search import GridSearchCV
L=3
X, y = make_multilabel_classification(n_classes=L, n_labels=2,
allow_unlabeled=True,
random_state=1, return_indicator=True)
model_to_set = OneVsRestClassifier(SVC())
parameters = {
"estimator__C": [1,2,4,8],
"estimator__kernel": ["poly","rbf"],
"estimator__degree":[1, 2, 3, 4],
}
model_tunning = GridSearchCV(model_to_set, param_grid=parameters,
scoring='f1')
model_tunning.fit(X, y)
print model_tunning.best_score_
print model_tunning.best_params_
#0.855175822314
#{'estimator__kernel': 'poly', 'estimator__C': 1, 'estimator__degree': 3}
erste Frage
behandle Was ist die Zahl 0.85
darstellt für? Ist es das beste Ergebnis unter den L
Klassifikatoren oder dem gemittelten? Entspricht die Menge der Parameter den besten Scorern unter L
Klassifikatoren?
2. Frage
Basierend auf der Tatsache, dass, wenn ich Recht habe, die OneVsRestClassifier
buchstäblich L
Klassifizierer für jedes Label baut, kann man erwarten, dass die Leistung von jedem Etikett zuzugreifen oder zu beobachten. Aber wie, in dem obigen Beispiel, um L
Punkte aus dem GridSearchCV
Objekt zu erhalten?
EDIT
das Problem zu vereinfachen und ich mehr über OneVsRestClassifier
helfen zu verstehen, bevor Tuning-Modell,
model_to_set.fit(X,y)
gp = model_to_set.predict(X) # the "global" prediction
fp = model_to_set.estimators_[0].predict(X) # the first-class prediction
sp = model_to_set.estimators_[1].predict(X) # the second-class prediction
tp = model_to_set.estimators_[2].predict(X) # the third-class prediction
Es kann, dass gp.T[0]==fp
, gp.T[1]==sp
und gp.T[2]==tp
gezeigt werden. Also ist die "globale" Vorhersage einfach die 'sequentielle' L
individuelle Vorhersage und die 2. Frage ist gelöst.
Aber es ist verwirrend für mich noch, dass, wenn eine Meta-Klassifikator OneVsRestClassifier
enthält L
Klassifizierer, wie kann GridSearchCV
gibt nur EINS beste Ergebnis, entsprechend einer von 4 * 2 * 4 Sätze von Parametern für eine meta-Klassifikator OneVsRestClassifier
mit L
Klassifikatoren?
Es würde ziemlich geschätzt werden, irgendeinen Kommentar zu sehen.
Danke! In der ersten gibt es 4 * 2 * 4 'OneVsRestClassifier's in der Menge und jede davon entspricht' L' Klassifikatoren, die denselben Parametersatz verwenden. Ich frage mich also, warum es nur einen Score für einen Set-Parameter gibt und nicht für "L". Ist 0,85 das beste Ergebnis unter 4 * 2 * 4 * 'L' Modellen? – Francis
@Francis, Nein, 0,85 ist das beste Ergebnis unter 4 * 2 * 4 OneVsRestClassifier (Weil Sie 4 * 2 * 4 Kombinationen von Parametern für diesen Klassifikator haben). GridSearchCV wertet einfach OneVsRestClassifier für jede mögliche Kombination aus und wählt eine mit der besten Genauigkeit aus. Sie können alle möglichen Kombinationen von Parametern und entsprechenden Scores aus dem Grid_scores_ Attribut von GridSearchCV erhalten, aber wenn Sie getrennte Scores für L Classifiers von jedem OneVsRestClassifier wollen (also 4 * 2 * 4 * L Scores) - sollten Sie Ihren eigenen Code schreiben. Sorry für mein Englisch vielleicht ist etwas nicht klar aus dem, was ich versuchte zu erklären. –
Nein, es ist eigentlich mein Englisch ist nicht gut, da ich kein Muttersprachler bin :). Ich denke, dass ich das Verhalten von GridSearchCV auf dem Meta-Klassifikator herausgefunden habe, bitte helfen Sie mir, die Antwort zu klären, danke! – Francis