2016-07-18 36 views
2

Ich möchte die Daten klassifizieren, in dem Bild gezeigt:Tune Parameter SVM

enter image description here

Dazu versuche ich einen SVM zu verwenden:

X = df[['score','word_lenght']].values 
Y = df['is_correct'].values 
clf = svm.SVC(kernel='linear', C = 1.0) 
clf.fit(X,Y) 
clf.coef_ 
clf = svm.SVC(kernel='linear') 
clf.fit(X, Y) 

Dies ist das Ergebnis, das ich bin immer:

enter image description here

Aber ich würde einen mor mögen Das flexible Modell, wie das rote Modell oder, wenn möglich, etwas wie die blaue Linie. Mit welchen Parametern könnte ich spielen, um näher an die gewünschte Antwort zu kommen?

enter image description here

Auch ich verstehe nicht ganz, wie ist der Maßstab der vertikalen (yy) Achsen erstellt wird, ist es zu groß.

w = clf.coef_[0] 
a = -w[0]/w[1] 
xx = np.linspace(0.85, 1) 
yy = (a * xx - (clf.intercept_[0])/w[1])*1 

Antwort

4

in erster Instanz, wenn die Daten eine angemessene Größe haben versuchen Sie können eine GridSearch, auszuführen Da offenbar mit Text arbeiten, betrachten Sie dieses Beispiel ::

def main(): 
    pipeline = Pipeline([ 
     ('vect', TfidfVectorizer(ngram_range=(2,2), min_df=1)), 
     ('clf',SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, 
        gamma=1e-3, kernel='rbf', max_iter=-1, probability=False, random_state=None, 
        shrinking=True, tol=0.001, verbose=False)) 
    ]) 


    parameters = { 
     'vect__max_df': (0.25, 0.5), 
     'vect__use_idf': (True, False), 
     'clf__C': [1, 10, 100, 1000], 

    } 


    X, y = X, Y.as_matrix() 
    X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.5) 
    grid_search = GridSearchCV(pipeline, parameters, n_jobs=-1, verbose=1, scoring='accuracy') 
    grid_search.fit(X_train, y_train) 
    print 'Best score: %0.3f' % grid_search.best_score_ 
    print 'Best parameters set:' 
    best_parameters = grid_search.best_estimator_.get_params() 
    for param_name in sorted(parameters.keys()): 
     print '\t%s: %r' % (param_name, best_parameters[param_name]) 


if __name__ == '__main__': 
main() 

Bitte beachte, dass ich vektorisiert meine Daten (Text) mit tf-idf. scikit-learn project implementiert auch RandomizedSearchCV. Schließlich gibt es noch andere interessante Tools wie Tpot Projekt, die genetische Programmierung verwenden, hoffe, dass dies hilft !.