2013-02-14 6 views
9

Für die Verbesserung von Support Vector Machine Ergebnisse muss ich Grid-Suche für die Suche nach besseren Parametern und Kreuz Validierung verwenden. Ich bin mir nicht sicher, wie man sie in scikit-lernen kombiniert. Grid Suche Suche beste Parameter (http://scikit-learn.org/stable/modules/grid_search.html) und Kreuzvalidierung vermeiden Überanpassung (http://scikit-learn.org/dev/modules/cross_validation.html)Kombinieren von Grid-Suche und Kreuzvalidierung in scikit lernen

#GRID SEARCH 
from sklearn import grid_search 
parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]} 
svr = svm.SVC() 
clf = grid_search.GridSearchCV(svr, parameters) 
#print(clf.fit(X, Y)) 

#CROSS VALIDATION 
from sklearn import cross_validation 
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, Y, test_size=0.4, random_state=0) 
clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train) 

print("crossvalidation") 
print(clf.score(X_test, y_test)) 
clf = svm.SVC(kernel='linear', C=1) 
scores = cross_validation.cross_val_score(clf, X, Y, cv=3) 
print(scores) 

Ergebnisse:

GridSearchCV(cv=None, 
    estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, 
kernel=rbf, probability=False, shrinking=True, tol=0.001, verbose=False), 
    estimator__C=1.0, estimator__cache_size=200, 
    estimator__class_weight=None, estimator__coef0=0.0, 
    estimator__degree=3, estimator__gamma=0.0, estimator__kernel=rbf, 
    estimator__probability=False, estimator__shrinking=True, 
    estimator__tol=0.001, estimator__verbose=False, fit_params={}, 
    iid=True, loss_func=None, n_jobs=1, 
    param_grid={'kernel': ('linear', 'rbf'), 'C': [1, 10]}, 
    pre_dispatch=2*n_jobs, refit=True, score_func=None, verbose=0) 

crossvalidation 
0.0 
[ 0.11111111 0.11111111 0.  ] 

Antwort

13

Sie sollten zunächst eine Entwicklung/Bewertung Split tun, die Rasterfahndung auf der Entwicklung laufen Teil und messen Sie eine eindeutige Endnote auf dem Bewertungsteil am Ende:

Es gibt an example in the documentation.

+0

Ich habe versucht, mit meinen Daten zu laufen, und ich habe diesen Fehler: clf = GridSearchCV (SVC (C = 1), getuned_parameters, Scoring = Punktzahl) TypeError: __init __() bekam ein unerwartetes Keyword-Argument 'Scoring', versuchte ich auch um das ursprüngliche Beispiel auszuführen und es gibt den gleichen Fehler, aber wie ist es möglich? Scoring ist ein Funktionsparameter! – postgres

+2

Überprüfen Sie die Versionsnummer des Dokuments und wählen Sie die Version aus, die mit der Installation übereinstimmt. Die URLs sind für jede Version unterschiedlich: http://scikit-learn.org/dev/modules/grid_search.html ist der Entwicklungszweig. http://scikit-learn.org/stable/modules/grid_search.html ist die letzte veröffentlichte Version (0.13 zum Zeitpunkt des Schreibens) und http://scikit-learn.org/0.13/modules/grid_search.html ist ein feste URL für die Version 0.13. – ogrisel

+0

Ich habe die Antwort korrigiert, um auf die stabile Version des Dokuments zu zeigen. – ogrisel

Verwandte Themen