TypeError:'ShuffleSplit'对象不可迭代

时间:2017-04-03 05:13:02

标签: python scikit-learn grid-search

我正在使用ShuffleSplit来重新排列数据,但我发现存在错误

TypeError                                 Traceback (most recent call last)
<ipython-input-36-192f7c286a58> in <module>()
      1 # Fit the training data to the model using grid search
----> 2 reg = fit_model(X_train, y_train)
      3 
      4 # Produce the value for 'max_depth'
      5 print "Parameter 'max_depth' is {} for the optimal model.".format(reg.get_params()['max_depth'])

<ipython-input-34-18b2799e585c> in fit_model(X, y)
     32 
     33     # Fit the grid search object to the data to compute the optimal model
---> 34     grid = grid.fit(X, y)
     35 
     36     # Return the optimal model after fitting the data

/Library/Python/2.7/site-packages/sklearn/grid_search.pyc in fit(self, X, y)
    827 
    828         """
--> 829         return self._fit(X, y, ParameterGrid(self.param_grid))
    830 
    831 

/Library/Python/2.7/site-packages/sklearn/grid_search.pyc in _fit(self, X, y, parameter_iterable)
    571                                     self.fit_params, return_parameters=True,
    572                                     error_score=self.error_score)
--> 573                 for parameters in parameter_iterable
    574                 for train, test in cv)
    575 

/Library/Python/2.7/site-packages/sklearn/externals/joblib/parallel.pyc in __call__(self, iterable)
    756             # was dispatched. In particular this covers the edge
    757             # case of Parallel used with an exhausted iterator.
--> 758             while self.dispatch_one_batch(iterator):
    759                 self._iterating = True
    760             else:

/Library/Python/2.7/site-packages/sklearn/externals/joblib/parallel.pyc in dispatch_one_batch(self, iterator)
    601 
    602         with self._lock:
--> 603             tasks = BatchedCalls(itertools.islice(iterator, batch_size))
    604             if len(tasks) == 0:
    605                 # No more tasks available in the iterator: tell caller to stop.

/Library/Python/2.7/site-packages/sklearn/externals/joblib/parallel.pyc in __init__(self, iterator_slice)
    125 
    126     def __init__(self, iterator_slice):
--> 127         self.items = list(iterator_slice)
    128         self._size = len(self.items)
    129 

/Library/Python/2.7/site-packages/sklearn/grid_search.pyc in <genexpr>((parameters,))
    572                                     error_score=self.error_score)
    573                 for parameters in parameter_iterable
--> 574                 for train, test in cv)
    575 
    576         # Out is a list of triplet: score, estimator, n_test_samples

TypeError: 'ShuffleSplit' object is not iterable

它显示了警告

  

/Library/Python/2.7/site-packages/sklearn/cross_validation.py:44:DreprecationWarning:在0.18版本中不推荐使用此模块,而是支持所有重构的类和函数都移动到的model_selection模块。另请注意,新CV迭代器的接口与此模块的接口不同。该模块将在0.20中删除。     “此模块将在0.20中删除。”,DeprecationWarning)   /Library/Python/2.7/site-packages/sklearn/grid_search.py​​:43:DeprecationWarning:在0.18版本中不推荐使用此模块,而是支持所有重构的类和函数都移动到的model_selection模块。该模块将在0.20中删除。     DeprecationWarning)

代码会导致错误

from sklearn.metrics import make_scorer
from sklearn.tree import DecisionTreeRegressor
from sklearn.grid_search import GridSearchCV

而以下不是

from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import make_scorer  

目前的scikit-learn版本是0.18.1。

这是怎么发生的?

1 个答案:

答案 0 :(得分:9)

从grid_search导入GridSearchCV时,如下所示:

from sklearn.grid_search import GridSearchCV

您必须收到如下警告:

  

此版本在0.18版本中已被弃用,以支持   model_selection模块,其中包含所有重构的类和   功能被移动。还要注意新CV的界面   迭代器与此模块的迭代器不同。这个模块将是   在0.20删除。

这是不言自明的,符合您的体验。

<强>解决方案: - 请勿使用已弃用的grid_search软件包。使用新的model_selection