要在GASearchCV中使用KerasRegressor,需要自定义一个适配器,并将其作为GASearchCV的参数传递。下面是一个示例:
from keras.wrappers.scikit_learn import KerasRegressor
from gasearchcv import GASearchCV
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
# 加载数据集
boston = load_boston()
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=42)
# 定义KerasRegressor的适配器
def keras_regressor_adapter(build_fn):
def wrapper(**params):
return build_fn(**params)
return wrapper
# 定义KerasRegressor的构建函数
def build_model(hidden_units=10, activation='relu', optimizer='adam'):
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(hidden_units, input_dim=X_train.shape[1], activation=activation))
model.add(Dense(1, activation='linear'))
model.compile(loss='mean_squared_error', optimizer=optimizer)
return model
# 创建Pipeline
pipeline = Pipeline([
('scaler', StandardScaler()),
('regressor', KerasRegressor(build_fn=keras_regressor_adapter(build_model), verbose=0))
])
# 定义参数搜索空间
param_distributions = {
'regressor__hidden_units': [5, 10, 20],
'regressor__optimizer': ['adam', 'rmsprop'],
'regressor__activation': ['relu', 'tanh']
}
# 创建GASearchCV对象
gas = GASearchCV(
pipeline,
param_distributions,
scoring=['neg_mean_squared_error'],
n_jobs=-1,
verbose=1,
random_state=42,
cv=5,
population_size=50,
generations=10,
crossover_proba=0.5,
mutation_proba=0.2,
selection_proba=0.5
)
# 执行搜索
gas.fit(X_train, y