Python Sklearn:分组数据的交叉验证
我正在尝试对分组数据实施交叉验证方案。我希望使用GroupKFold方法,但我一直得到一个错误。我做错了什么? 代码(与我使用的代码略有不同——我有不同的数据,所以我有一个更大的n_分割,但其他所有符号都是相同的) 错误:Python Sklearn:分组数据的交叉验证,python,scikit-learn,cross-validation,Python,Scikit Learn,Cross Validation,我正在尝试对分组数据实施交叉验证方案。我希望使用GroupKFold方法,但我一直得到一个错误。我做错了什么? 代码(与我使用的代码略有不同——我有不同的数据,所以我有一个更大的n_分割,但其他所有符号都是相同的) 错误: Traceback (most recent call last): File "<ipython-input-143-11d785056a08>", line 8, in <module> result = grid_search.fit(x, y
Traceback (most recent call last):
File "<ipython-input-143-11d785056a08>", line 8, in <module>
result = grid_search.fit(x, y)
File "/home/student/anaconda/lib/python3.5/site-packages/sklearn/grid_search.py", line 813, in fit
return self._fit(X, y, ParameterGrid(self.param_grid))
File "/home/student/anaconda/lib/python3.5/site-packages/sklearn/grid_search.py", line 566, in _fit
n_folds = len(cv)
TypeError: object of type 'generator' has no len()
到
也不行。然后,错误消息为:
'GroupKFold' object is not iterable
GroupKFold
函数一次生成一对训练和测试索引。您应该调用拆分值上的list
,将它们全部放入一个列表中,以便计算长度:
gkf = list(GroupKFold( n_splits=3).split(x,y,group))
您有什么版本的
sklearn
GridSearchCV
的cv
参数通常应该使用生成器。它似乎可以工作。然而,我尝试了gkf=list(GroupKFold(n_splits=3)、split(x,y,group))
和gkf=list(GroupKFold(n_splits=3)、split(x[:-100]、y[:-100]、group[:-100))
两种情况下,都用grid\u search.fit(x,y)
对其进行训练。这两种方法运行平稳,结果几乎相同,但我预计第二种方法会失败(因为它在gkf上的元素比在fit上的元素少)。我如何检查它的行为呢?还尝试了gkf=list(GroupKFold(n_splits=3)。split(x,y,group))
使用grid\u search.fit(x[:100],y[:100])
并且它确实引发了一个奇怪的错误索引器:索引100超出了大小100的界限
gkf = GroupKFold( n_splits=3)
'GroupKFold' object is not iterable
gkf = list(GroupKFold( n_splits=3).split(x,y,group))