2017-09-20 2 views
1

Ich habe SVM (scikit-learn) in einigen Datensätzen angewendet und wollte die Werte von C und Gamma finden, die die beste Genauigkeit für die Testmenge bieten.Die Werte von C und Gamma zur Optimierung von SVM finden

Zuerst habe ich C auf eine ganze Zahl fixiert und dann über viele Werte von Gamma iteriert, bis ich das Gamma bekam, was mir die beste Testsatzgenauigkeit für das C gab. Und dann fixierte ich dieses Gamma, das ich im obigen Schritt bekommen habe und iteriere über Werte von C und finde ein C, das mir die beste Genauigkeit geben kann und so weiter ...

Aber die oben genannten Schritte können niemals die beste Kombination von Gamma und C ergeben, die die beste Testsatzgenauigkeit erzeugen.

Kann jemand mir helfen, einen Ausweg zu finden, um diese Kombination zu bekommen (Gamma, C) in sckit-lernen?

+0

Haben die Antwort Ihr Problem lösen? –

+0

Sicher nicht! Es wird eine hohe Wahrscheinlichkeit geben, dass ich im lokalen Maximum feststecke und die Kombination von C und Gamma wird mir nicht die beste Genauigkeit geben. –

+0

Haben Sie versucht, es zu implementieren, oder erraten Sie es? Die Gitternetzsuche wird alle möglichen Kombinationen ausprobieren und wird daher nicht in der lokalen Maxima stecken bleiben –

Antwort

2

Sie suchen nach Hyper-Parameter-Tuning. Bei der Parameteroptimierung übergeben wir ein Wörterbuch, das eine Liste möglicher Werte für Ihren Klassifikator enthält, und dann werden abhängig von der gewählten Methode (z. B. GridSearchCV, RandomSearch usw.) die bestmöglichen Parameter zurückgegeben. Sie können mehr darüber lesen here.

Als Beispiel:

#Create a dictionary of possible parameters 
params_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100], 
      'gamma': [0.0001, 0.001, 0.01, 0.1], 
      'kernel':['linear','rbf'] } 

#Create the GridSearchCV object 
grid_clf = GridSearchCV(SVC(class_weight='balanced'), params_grids) 

#Fit the data with the best possible parameters 
grid_clf = clf.fit(X_train, y_train) 

#Print the best estimator with it's parameters 
print grid_clf.best_estimators 

Sie mehr über GridSearchCV herehere und RandomizedSearchCV lesen kann. Ein Wort der Vorsicht, SVM braucht viel CPU-Leistung, also sei vorsichtig mit der Anzahl der Parameter, die du passierst. Je nach Ihren Daten und der Anzahl der übergebenen Parameter kann die Verarbeitung etwas dauern.

This link enthält auch ein Beispiel auch

Verwandte Themen