2016-11-01 5 views
2

그룹화 된 데이터에 교차 유효성 검사 체계를 구현하려고합니다. GroupKFold 메서드를 사용하고 싶었지만 오류가 계속 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 는 코드 (내가 사용하는 것과 약간 다른 - 나는 큰 n_splits 있었다, 그래서 나는 다른 데이터를했지만, 다른 everythign은 동일)Sklearn : 그룹화 된 데이터의 교차 유효성 검사

from sklearn import metrics 
import matplotlib.pyplot as plt 
import numpy as np 
from sklearn.model_selection import GroupKFold 
from sklearn.grid_search import GridSearchCV 
from xgboost import XGBRegressor 
#generate data 
x=np.array([0,1,2,3,4,5,6,7,8,9,10,11,12,13]) 
y= np.array([1,2,3,4,5,6,7,1,2,3,4,5,6,7]) 
group=np.array([1,0,1,1,2,2,2,1,1,1,2,0,0,2)] 
#grid search 
gkf = GroupKFold(n_splits=3).split(x,y,group) 
subsample = np.arange(0.3,0.5,0.1) 
param_grid = dict(subsample=subsample) 
rgr_xgb = XGBRegressor(n_estimators=50) 
grid_search = GridSearchCV(rgr_xgb, param_grid, cv=gkf, n_jobs=-1) 
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() 

라인

gkf = GroupKFold(n_splits=3).split(x,y,group) 

gkf = GroupKFold(n_splits=3) 

도 작동하지 않습니다. 오류 메시지는 다음이다 :

'GroupKFold' object is not iterable 
+1

당신은'sklearn'의 버전은 무엇을해야합니까 : 당신은 길이가 계산 될 수 있도록 목록에 그들 모두를 얻을 수있는 분할 값에 list를 호출해야? 'GridSearchCV'의'cv' 매개 변수는 일반적으로 생성기를 가져와야합니다. –

답변

11

트레이닝 및 테스트 인덱스는 한 번에 한 쌍GroupKFold수율의 split 기능.

gkf = list(GroupKFold(n_splits=3).split(x,y,group)) 
+1

저는이 답변에 대한 연령대를 찾고있었습니다. 감사합니다! – Archie