1

此问题之前已被多次询问。但是当我回答下面的问题时,我得到一个错误:使用预定义的验证集执行网格搜索Sklearn

首先我指定哪一部分是训练集和验证集,如下所示。

my_test_fold = [] 


for i in range(len(train_x)): 
    my_test_fold.append(-1) 

for i in range(len(test_x)): 
    my_test_fold.append(0) 

然后进行网格搜索。

from sklearn.model_selection import PredefinedSplit 
param = { 
'n_estimators':[200], 
'max_depth':[5], 
'min_child_weight':[3], 
'reg_alpha':[6], 
    'gamma':[0.6], 
    'scale_neg_weight':[1], 
    'learning_rate':[0.09] 
} 




gsearch1 = GridSearchCV(estimator = XGBClassifier( 
    objective= 'reg:linear', 
    seed=1), 
param_grid = param, 
scoring='roc_auc', 
cv = PredefinedSplit(test_fold=my_test_fold), 
verbose = 1) 


gsearch1.fit(new_data_df, df_y) 

但我得到以下错误

object of type 'PredefinedSplit' has no len() 

回答

0

尝试更换

cv = PredefinedSplit(test_fold=my_test_fold) 

cv = list(PredefinedSplit(test_fold=my_test_fold).split(new_data_df, df_y)) 

的原因是,你可能需要应用split method到实际上得到t他分为训练和测试(然后将其从可迭代对象转换为列表对象)。

+0

非常感谢。它运作良好! – Pubudu

+0

不客气:) –