मैं जानना चाहता था कि ग्रिड खोज करने के लिए एक बेहतर और अंतर्निहित तरीका है और एक ही पाइपलाइन में कई मॉडलों का परीक्षण करें। बेशक मॉडलों के पैरामीटर अलग होंगे, जो इसे समझने के लिए जटिल बनाते हैं। यहाँ मैं क्या किया है:एकाधिक क्लासिफायरों पर साइकिट ग्रिड खोज पाइथन
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_
हालांकि, इस पद्धति अभी भी एक वर्गीकारक के भीतर सबसे अच्छा मॉडल दे रहा है, और classifiers के बीच की तुलना नहीं।
ऐसा करने का कोई स्वचालित तरीका नहीं है। –
अभी तक;) [समस्या यह है कि हम पाइपलाइन के "कदम" सेट नहीं कर सकते हैं, है ना?] –
@AndreasMueller; खेद है कि पहले इस पते को संबोधित नहीं किया था। क्या आप वहां विस्तार से बता सकते हैं? – Anuj