Python GridSearchCV索引XXXXX的大小xxxxxx的边界不超出界限



我正在使用网格赛车来寻找分类器的最佳超参数,如下所述:http://scikit-learn.org/stable/stable/auto_examples/model_examples/model_selection/plot_nestection/plot_nested_nested_cross_valide_validation_iris.html

这是一块代码的样子:

  X = X.values   # convert from pandas Dataframe to numpy array
  y = np.array(y)
  n_samples, n_features = X.shape 
  n_outputs = y.shape[0]
  inner_cv = cross_validation.StratifiedKFold(y, n_folds=4, shuffle=True, random_state=rnd)
  outer_cv = cross_validation.StratifiedKFold(y, n_folds=kFold, shuffle=True, random_state=rnd)
  # Non_nested parameter search and scoring
  clf = GridSearchCV(estimator=pipeline, param_grid=param_dict, scoring= scores, cv=inner_cv)
  # Nested CV with parameter optimization
  nested_score = cross_validation.cross_val_score(clf, X=X, y=y, cv=outer_cv)
  nested_score.fit(X,y)
  nested_scores = nested_score.mean()

但是,由于某种原因,我遇到了这个错误:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-1-cad4e848fb54> in <module>()
    124 
    125             # Nested CV with parameter optimization
--> 126             nested_score = cross_validation.cross_val_score(clf, X=X, y=y, cv=outer_cv)
    127             nested_score.fit(X,y)
    128             nested_scores = nested_score.mean()
C:UsersYasAnaconda3libsite-packagessklearncross_validation.py in cross_val_score(estimator, X, y, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch)
   1431                                               train, test, verbose, None,
   1432                                               fit_params)
-> 1433                       for train, test in cv)
   1434     return np.array(scores)[:, 0]
   1435 
C:UsersYasAnaconda3libsite-packagessklearnexternalsjoblibparallel.py in __call__(self, iterable)
    798             # was dispatched. In particular this covers the edge
    799             # case of Parallel used with an exhausted iterator.
--> 800             while self.dispatch_one_batch(iterator):
    801                 self._iterating = True
    802             else:
C:UsersYasAnaconda3libsite-packagessklearnexternalsjoblibparallel.py in dispatch_one_batch(self, iterator)
    656                 return False
    657             else:
--> 658                 self._dispatch(tasks)
    659                 return True
    660 
C:UsersYasAnaconda3libsite-packagessklearnexternalsjoblibparallel.py in _dispatch(self, batch)
    564 
    565         if self._pool is None:
--> 566             job = ImmediateComputeBatch(batch)
    567             self._jobs.append(job)
    568             self.n_dispatched_batches += 1
C:UsersYasAnaconda3libsite-packagessklearnexternalsjoblibparallel.py in __init__(self, batch)
    178         # Don't delay the application, to avoid keeping the input
    179         # arguments in memory
--> 180         self.results = batch()
    181 
    182     def get(self):
C:UsersYasAnaconda3libsite-packagessklearnexternalsjoblibparallel.py in __call__(self)
     70 
     71     def __call__(self):
---> 72         return [func(*args, **kwargs) for func, args, kwargs in self.items]
     73 
     74     def __len__(self):
C:UsersYasAnaconda3libsite-packagessklearnexternalsjoblibparallel.py in <listcomp>(.0)
     70 
     71     def __call__(self):
---> 72         return [func(*args, **kwargs) for func, args, kwargs in self.items]
     73 
     74     def __len__(self):
C:UsersYasAnaconda3libsite-packagessklearncross_validation.py in _fit_and_score(estimator, X, y, scorer, train, test, verbose, parameters, fit_params, return_train_score, return_parameters, error_score)
   1529             estimator.fit(X_train, **fit_params)
   1530         else:
-> 1531             estimator.fit(X_train, y_train, **fit_params)
   1532 
   1533     except Exception as e:
C:UsersYasAnaconda3libsite-packagessklearngrid_search.py in fit(self, X, y)
    802 
    803         """
--> 804         return self._fit(X, y, ParameterGrid(self.param_grid))
    805 
    806 
C:UsersYasAnaconda3libsite-packagessklearngrid_search.py in _fit(self, X, y, parameter_iterable)
    551                                     self.fit_params, return_parameters=True,
    552                                     error_score=self.error_score)
--> 553                 for parameters in parameter_iterable
    554                 for train, test in cv)
    555 
C:UsersYasAnaconda3libsite-packagessklearnexternalsjoblibparallel.py in __call__(self, iterable)
    798             # was dispatched. In particular this covers the edge
    799             # case of Parallel used with an exhausted iterator.
--> 800             while self.dispatch_one_batch(iterator):
    801                 self._iterating = True
    802             else:
C:UsersYasAnaconda3libsite-packagessklearnexternalsjoblibparallel.py in dispatch_one_batch(self, iterator)
    656                 return False
    657             else:
--> 658                 self._dispatch(tasks)
    659                 return True
    660 
C:UsersYasAnaconda3libsite-packagessklearnexternalsjoblibparallel.py in _dispatch(self, batch)
    564 
    565         if self._pool is None:
--> 566             job = ImmediateComputeBatch(batch)
    567             self._jobs.append(job)
    568             self.n_dispatched_batches += 1
C:UsersYasAnaconda3libsite-packagessklearnexternalsjoblibparallel.py in __init__(self, batch)
    178         # Don't delay the application, to avoid keeping the input
    179         # arguments in memory
--> 180         self.results = batch()
    181 
    182     def get(self):
C:UsersYasAnaconda3libsite-packagessklearnexternalsjoblibparallel.py in __call__(self)
     70 
     71     def __call__(self):
---> 72         return [func(*args, **kwargs) for func, args, kwargs in self.items]
     73 
     74     def __len__(self):
C:UsersYasAnaconda3libsite-packagessklearnexternalsjoblibparallel.py in <listcomp>(.0)
     70 
     71     def __call__(self):
---> 72         return [func(*args, **kwargs) for func, args, kwargs in self.items]
     73 
     74     def __len__(self):
C:UsersYasAnaconda3libsite-packagessklearncross_validation.py in _fit_and_score(estimator, X, y, scorer, train, test, verbose, parameters, fit_params, return_train_score, return_parameters, error_score)
   1522     start_time = time.time()
   1523 
-> 1524     X_train, y_train = _safe_split(estimator, X, y, train)
   1525     X_test, y_test = _safe_split(estimator, X, y, test, train)
   1526 
C:UsersYasAnaconda3libsite-packagessklearncross_validation.py in _safe_split(estimator, X, y, indices, train_indices)
   1589                 X_subset = X[np.ix_(indices, train_indices)]
   1590         else:
-> 1591             X_subset = safe_indexing(X, indices)
   1592 
   1593     if y is not None:
C:UsersYasAnaconda3libsite-packagessklearnutils__init__.py in safe_indexing(X, indices)
    161                                    indices.dtype.kind == 'i'):
    162             # This is often substantially faster than X[indices]
--> 163             return X.take(indices, axis=0)
    164         else:
    165             return X[indices]

    IndexError: index 4549 is out of bounds for size 4549

x和y具有以下维度:

   X: (6066, 5)
   y: (6066,)

一切看起来正常。问题来自哪里?

感谢您分享您的意见。

不确定您在这里要做什么,但是GridSearchCV不是分类器,因此您不能将其传递给Cross_val_score。

GridSearchCV使用不同的参数多次运行交叉验证。因此,它代表多个分类器。安装后,它确实具有BEST_CLASSIFIER属性。

最新更新