【问题标题】:TypeError: 'ShuffleSplit' object is not iterableTypeError:“ShuffleSplit”对象不可迭代
【发布时间】:2017-08-27 20:44:39
【问题描述】:

我正在使用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:DeprecationWarning:此模块在 0.18 版中已弃用,取而代之的是 model_selection 模块,所有重构的类和函数都移入其中。另请注意,新的 CV 迭代器的接口与此模块的接口不同。此模块将在 0.20 中删除。 “此模块将在 0.20 中删除。”,弃用警告) /Library/Python/2.7/site-packages/sklearn/grid_search.py​​:43:DeprecationWarning:此模块在 0.18 版中已弃用,取而代之的是 model_selection 模块,所有重构的类和函数都移入其中。此模块将在 0.20 中删除。 弃用警告)

代码会导致错误

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。

这是怎么发生的?

【问题讨论】:

    标签: python scikit-learn grid-search


    【解决方案1】:

    当像这样从 grid_search 导入 GridSearchCV 时:

    from sklearn.grid_search import GridSearchCV
    

    您必须收到如下警告:

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

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

    解决方案:- 不要使用已弃用的 grid_search。使用新的model_selection

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 2018-10-10
      • 2021-12-13
      • 2019-02-20
      • 2020-03-27
      • 2018-12-12
      • 2018-07-16
      • 2011-09-12
      • 2018-04-14
      相关资源
      最近更新 更多