2016-04-05 21 views
1

Ich führe eine Rastersuche durch, um die besten SVM-Parameter zu identifizieren. Ich benutze ipython und sklearn. Der Code ist langsam und läuft nur auf einem Kern. Wie kann dies angelegt werden und mehrere Kerne nutzen? DankBeschleunigung der Rastersuche in sklearn

random_state = np.random.RandomState(10) 
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=.2,random_state=random_state) 

model_to_set = OneVsRestClassifier(svm.SVC(kernel="linear")) 

parameters = { 
    "estimator__C": [1, 2, 4, 8, 16, 32], 
    "estimator__kernel": ["linear", "rbf"], 
    "estimator__gamma":[1, 0.1, 1e-2, 1e-3, 1e-4], 
} 

model_tuning = GridSearchCV(model_to_set, param_grid=parameters) 
model_tuning.fit(X_train, y_train) 

print model_tuning.best_score_ 
print model_tuning.best_params_ 
print "Time passed: ", "{0:.1f}".format(time.time()-t), "sec" 

Antwort

4

Es gibt einen n_job Parameter in GridSearchCV

n_jobs: int, default = 1

Anzahl von Jobs parallel laufen zu lassen. Geändert in Version 0.17: Upgrade auf Joblib 0.9.3.

+0

Perfect, dank Kumpel. –

2

Standardmäßig verwendet GridSearchCV 1 Auftrag, um bestimmte Parameterwerte für einen Schätzer zu durchsuchen.

So müssen Sie es explizit mit der Anzahl der parallelen Jobs setzen, die Sie durch chaning die folgende Zeile wünschen:

model_tuning = GridSearchCV(model_to_set, param_grid=parameters) 

in die folgenden Jobs parallel laufen zu lassen:

model_tuning = GridSearchCV(model_to_set, param_grid=parameters, n_jobs=4) 
0

Probieren Sie die Verwendung von Sparkcontext aus, um die Rastersuche über mehrere Rechner hinweg zu parallelisieren. Durch die Verwendung von Funken sklearn Bibliothek, werden Sie in der Lage sein, das Programm schneller arbeiten mit nur einzelnen Zeilenwechsel

from spark_sklearn import GridSearchCV 

Auch stellen Sie sicher, dass Sie Funken Kontext initialisieren zu machen („sc“) richtig. Dann alles, was Sie tun müssen, ist

gs = GridSearchCV(sc, classifier, param_grid) 
gs.fit(X, y) 

Für Standard-Ziffern-Datensatz in Scikit-Learn, Rastersuche dauerte 318,92 Sekunden für 864 Kandidateneinstellungen. Das gleiche dauerte nur 122,03 Sekunden von 4 Maschinen mit

Sie können mehr über Online Check here