Ich wollte wissen, ob es eine bessere integrierte Möglichkeit gibt, Grid-Suche zu machen und mehrere Modelle in einer einzigen Pipeline zu testen. Natürlich würden die Parameter der Modelle anders sein, was für mich kompliziert ist, dies herauszufinden. Hier ist, was ich getan habe:scikit Grid Suche über mehrere Klassifikatoren python
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.naive_bayes import MultinomialNB
from sklearn.grid_search import GridSearchCV
def grid_search():
pipeline1 = Pipeline((
('clf', RandomForestClassifier()),
('vec2', TfidfTransformer())
))
pipeline2 = Pipeline((
('clf', KNeighborsClassifier()),
))
pipeline3 = Pipeline((
('clf', SVC()),
))
pipeline4 = Pipeline((
('clf', MultinomialNB()),
))
parameters1 = {
'clf__n_estimators': [10, 20, 30],
'clf__criterion': ['gini', 'entropy'],
'clf__max_features': [5, 10, 15],
'clf__max_depth': ['auto', 'log2', 'sqrt', None]
}
parameters2 = {
'clf__n_neighbors': [3, 7, 10],
'clf__weights': ['uniform', 'distance']
}
parameters3 = {
'clf__C': [0.01, 0.1, 1.0],
'clf__kernel': ['rbf', 'poly'],
'clf__gamma': [0.01, 0.1, 1.0],
}
parameters4 = {
'clf__alpha': [0.01, 0.1, 1.0]
}
pars = [parameters1, parameters2, parameters3, parameters4]
pips = [pipeline1, pipeline2, pipeline3, pipeline4]
print "starting Gridsearch"
for i in range(len(pars)):
gs = GridSearchCV(pips[i], pars[i], verbose=2, refit=False, n_jobs=-1)
gs = gs.fit(X_train, y_train)
print "finished Gridsearch"
print gs.best_score_
Doch dieser Ansatz nach wie vor das beste Modell in jedem Klassifikator geben und nicht zu vergleichen zwischen Klassifizierer.
Es gibt keine automatische Möglichkeit, dies zu tun. –
noch;) [Das Problem ist, dass wir nicht die "Schritte" der Pipeline setzen können, oder?] –
@AndreasMueller; Entschuldigung hat das früher nicht angesprochen. Können Sie näher erläutern, was Sie dort gemeint haben? – Anuj