2016-08-09 27 views
0

Ich habe versucht, meine SVM mit Gridsearchcv tunen, aber es wirft Fehler.Wie benutze ich gridSearch CV mit scipy?

mein Code:

train = pd.read_csv('train_set.csv') 
label = pd.read.csv('lebel.csv') 

params = { 'C' : [ 0.01 , 0.1 , 1 , 10] 
clf = GridSearchCV(SVC() , params , n_jobs = -1) 
clf.fit(train , label) 

den Fehler wirft: 'zu viel Indizes für Array'

aber wenn ich einfach tun:

clf = svc() 
clf.fit(train.data , label.data) 

der Code funktioniert gut

+0

Wie ist das eine Pandas Frage? Scheint mehr wie SciPy zu mir ... Bedenke auch ein komplettes überprüfbares und reproduzierbares Beispiel. Was bedeutet, geben Sie eine kleine Probe Ihrer Daten, um die Antworten auf ... – Kartik

+0

@Kartik Ich habe es bearbeitet, –

Antwort

1

Ich vermute, das Problem liegt in Ihrer Datenstruktur train.data/label.data. Ich habe beide Versionen des Codes getestet und sie funktionieren:

import sklearn.svm as sksvm 
import sklearn.grid_search as skgs 

params = { 'C' : [ 0.01 , 0.1 , 1 , 10]} 
X = np.random.rand(1000, 10) # (1000 x 10) matrix, 1000 points with 10 features 
Y = np.random.randint(0, 2, 1000) # 1000 array, binary labels 

mod = sksvm.SVC() 
mod.fit(X, Y) 

Ausgang:

SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, 
    kernel='rbf', max_iter=-1, probability=False, random_state=None, 
    shrinking=True, tol=0.001, verbose=False) 

und

import sklearn.svm as sksvm 
import sklearn.grid_search as skgs 

params = { 'C' : [ 0.01 , 0.1 , 1 , 10]} 
X = np.random.rand(1000, 10) # (1000 x 10) matrix, 1000 points with 10 features 
Y = np.random.randint(0, 2, 1000) # 1000 array, binary labels 

mod = skgs.GridSearchCV(sksvm.SVC(), params, n_jobs=-1) 
mod.fit(X, Y) 

Ausgang:

GridSearchCV(cv=None, error_score='raise', 
     estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, 
    kernel='rbf', max_iter=-1, probability=False, random_state=None, 
    shrinking=True, tol=0.001, verbose=False), 
     fit_params={}, iid=True, loss_func=None, n_jobs=-1, 
     param_grid={'C': [0.01, 0.1, 1, 10]}, pre_dispatch='2*n_jobs', 
     refit=True, score_func=None, scoring=None, verbose=0) 

Wenn Ihre Daten in Datenrahmen und Serie der Code funktioniert immer noch Sie können es versuchen, durch Zugabe von:

X = pd.DataFrame(X) 
Y = pd.Series(Y) 

, nachdem Sie X und Y. erzeugen

Schwierig allerdings ohne reproduzierbar Stück Code zu sagen. Sie sollten wahrscheinlich auch die Bezeichnung sklearn zu der Frage hinzufügen.

+0

Ich denke, das Problem ist die Weitergabe der Bezeichnung als DataFrame, also was soll ich tun. –

+0

Ich habe as_type.array() nichts verwendet. @ Borja Ich verliere meine Gesundheit darüber. Bitte beachten Sie –

+0

Sie sollten die Serie mit den Etiketten aus dem Datenrahmen extrahieren. Entweder 'label [column_name]', wenn Sie den Namen der Spalte kennen, oder 'label.iloc [:, 0]', wenn es die erste Spalte ist oder wenn es nur eine Spalte gibt. – Borja