我正在使用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。
这是怎么发生的?
答案 0 :(得分:9)
从grid_search导入GridSearchCV时,如下所示:
from sklearn.grid_search import GridSearchCV
您必须收到如下警告:
此版本在0.18版本中已被弃用,以支持 model_selection模块,其中包含所有重构的类和 功能被移动。还要注意新CV的界面 迭代器与此模块的迭代器不同。这个模块将是 在0.20删除。
这是不言自明的,符合您的体验。
<强>解决方案强>: -
请勿使用已弃用的grid_search
软件包。使用新的model_selection
。