2016-08-09 1 views
0

J'ai essayé d'ajuster mon SVM en utilisant Gridsearchcv mais il y a des erreurs.comment utiliser gridSearch CV avec scipy?

mon code est:

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) 

jette l'erreur: 'indices trop pour array'

mais quand je simplement faire ceci:

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

le code fonctionne très bien

+0

Comment est-ce une question Pandas? Cela ressemble plus à SciPy pour moi ... Envisagez également d'inclure un exemple complet vérifiable et reproductible. Ce qui signifie donner un petit échantillon de vos données pour tester les réponses sur ... – Kartik

+0

@Kartik je l'ai édité, –

Répondre

1

Je suppose que le problème réside dans votre structure de données train.data/label.data. J'ai testé les deux versions de votre code et ils fonctionnent:

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) 

Sortie:

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) 

et

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) 

Sortie:

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) 

Si vos données sont en dataframe et série le code fonctionne toujours , Vous pouvez l'essayer en ajoutant:

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

après que vous générez X et Y.

Difficile à dire sans un morceau reproductible code bien. Aussi vous devriez probablement ajouter l'étiquette sklearn à la question.

+0

Je pense que le problème est de passer l'étiquette en tant que DataFrame, alors que dois-je faire. –

+0

J'ai utilisé as_type.array() rien. @Borja je perds ma santé mentale à ce sujet. S'il vous plaît voir à –

+0

Vous devez extraire la série avec les étiquettes de la base de données. Soit 'label [nom_colonne]' si vous connaissez le nom de la colonne, ou 'label.iloc [:, 0]' s'il s'agit de la première colonne ou s'il n'y a qu'une seule colonne. – Borja