使用GridSearchCV调参时遇ValueError: Unknown label type: continuous错误求助
问题解决:ValueError: Unknown label type: continuous
你遇到的错误核心原因是误用了分类任务的封装器:KerasClassifier是专门为分类任务设计的,它默认会检查标签是否为离散类别,而你的任务是回归(预测连续的出租车车费),标签是浮点型连续值,因此触发了类型不匹配的错误。
具体修改步骤
替换封装器为回归专用的
KerasRegressor
从keras.wrappers.scikit_learn导入KerasRegressor,替换代码中的KerasClassifier。修正后的完整代码
from keras.wrappers.scikit_learn import KerasRegressor # 替换原KerasClassifier导入 import keras def create_model(activation = 'relu', optimizer='adam'): model = keras.models.Sequential([ keras.layers.Dense(128, activation=activation), keras.layers.Dense(64, activation=activation), keras.layers.Dense(32, activation='sigmoid'), keras.layers.Dense(1) # 回归任务输出层无需激活函数 ]) model.compile(optimizer=optimizer, loss='mean_squared_error') return model # 用KerasRegressor替代KerasClassifier model = KerasRegressor(build_fn=create_model, epochs=50, verbose=0) optimizer = ['SGD', 'RMSprop', 'Adadelta', 'Adam', 'Adamax', 'Nadam'] epochs = [50, 100, 150, 200, 250, 300] param_grid = dict(optimizer = optimizer, epochs=epochs) grid = GridSearchCV( estimator=model, param_grid=param_grid, n_jobs=-1, cv=3, scoring='neg_mean_squared_error', verbose=2 ) grid_result = grid.fit(train_in, train_out)
额外注意事项
- 确保
train_out是一维数组(形状为(样本数,)),如果当前是二维(比如(样本数,1)),可以用train_out = train_out.flatten()转换。 - 回归任务的输出层不要加激活函数(比如
sigmoid或softmax),否则会限制输出范围,影响回归效果。
内容的提问来源于stack exchange,提问作者diegobc11
相关产品推荐
相关产品推荐

