2013-01-08 5 views
5

Я делаю поиск сетки по MultiLabel данных следующим образом:GridSearch для многоканального OneVsRestClassifier?

#imports 
from sklearn.svm import SVC as classifier 
from sklearn.pipeline import Pipeline 
from sklearn.decomposition import RandomizedPCA 
from sklearn.cross_validation import StratifiedKFold 
from sklearn.grid_search import GridSearchCV 

#classifier pipeline 
clf_pipeline = clf_pipeline = OneVsRestClassifier(
       Pipeline([('reduce_dim', RandomizedPCA()), 
          ('clf', classifier()) 
          ] 
         )) 

C_range = 10.0 ** np.arange(-2, 9) 
gamma_range = 10.0 ** np.arange(-5, 4) 
n_components_range = (10, 100, 200) 
degree_range = (1, 2, 3, 4) 

param_grid = dict(estimator__clf__gamma=gamma_range, 
        estimator__clf__c=c_range, 
        estimator__clf__degree=degree_range, 
        estimator__reduce_dim__n_components=n_components_range) 

grid = GridSearchCV(clf_pipeline, param_grid, 
           cv=StratifiedKFold(y=Y, n_folds=3), n_jobs=1, 
           verbose=2) 
grid.fit(X, Y) 

Я вижу следующий отслеживающий:

/Users/andrewwinterman/Documents/sparks-honey/classifier/lib/python2.7/site-packages/sklearn/grid_search.pyc in fit_grid_point(X, y, base_clf, clf_params, train, test, loss_func, score_func, verbose, **fit_params) 
    107 
    108  if y is not None: 
--> 109   y_test = y[safe_mask(y, test)] 
    110   y_train = y[safe_mask(y, train)] 
    111   clf.fit(X_train, y_train, **fit_params) 

TypeError: only integer arrays with one element can be converted to an index 

Выглядит как объекты GridSearchCV с несколькими ярлыками. Как мне обойти это? Нужно ли явным образом перебирать уникальные классы с помощью label_binarizer, запускать поиск по сетке на каждой под-оценке?

+0

Вы используете 0.12.1 или 0.13? Я думаю, что проблема должна исчезнуть при обновлении до 0,13. –

+0

Я использовал ветку dev 0.13. Я попробую еще раз. – Maus

+0

Он должен работать в стартере версии 0.13 и текущем. Если это не так, пожалуйста, откройте вопрос о github. –

ответ

6

Я думаю, что есть ошибка в grid_search.py ​​

Вы пытались дать y как Numpy массив?

import numpy as np 
Y = np.asarray(Y) 
+0

нет, я фактически прекратил работать с scikit learn. Вам придется попробовать все предлагаемые решения самостоятельно. Если вы можете доказать одну работу, я соглашусь с ней :) – Maus

+1

только что решил мою проблему, спасибо. –

+0

@ ZéRicardo, рад слышать это :) – Thorn

Смежные вопросы