我正在尝试为XG Boost模型编写超参数调优代码。然而,我不断遇到一个错误。以下是我的代码:
#定义X,y
y = data.SalePrice
x = data.drop(['SalePrice'], axis=1).select_dtypes(exclude=['object'])
#测试集和训练集的分割
train_x, test_x, train_y, test_y = train_test_split(x, y, test_size=0.3, random_state=0)
#用于填补缺失值的插补变换器
my_imputer = Imputer()
#分别处理训练和测试集的X
train_x = my_imputer.fit_transform(train_x)
test_x = my_imputer.transform(test_x)
然后,这是数据的超参数设置:
#通过交叉验证设置参数
tuned_parameters = [{'n_estimators': [5, 25, 50, 100, 250, 500],'learning_rate': [0.01,0.05]}]
scores = ['precision', 'recall']
for score in scores:
print("# 针对%s进行超参数调优" % score)
print()
#XGBRegressor
clf = GridSearchCV(XGBRegressor(tuned_parameters), cv=5,scoring='%s_macro' % score)
clf.fit(train_x, train_y)
print("在开发集上找到的最佳参数设置:")
print(clf.best_params_)
我遇到的错误是:TypeError: __init__() missing 1 required positional argument: ‘param_grid’
回答:
看起来你的tuned_parameters
放错了位置:D;尝试重新定义clf
如下:
clf = GridSearchCV(XGBRegressor(), param_grid=tuned_parameters, cv=5,scoring='%s_macro' % score)
然后告诉我是否有效。