如何解决为什么我的调优模型的得分明显不是最优的负?
我正在尝试调整一个堆叠回归器,其中包括一个构成决策树的层、一个随机森林和一个深度网络,以及一个作为搅拌器的 xgbregressor。
我的调优程序如下
import os
import random
import numpy as np
import tensorflow as tf
from sklearn.datasets import fetch_california_housing
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import StackingRegressor
from sklearn.model_selection import RandomizedSearchCV
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeRegressor
from scikeras.wrappers import KerasRegressor
import xgboost
########## Reproducibility
seed_value= 0
os.environ['PYTHONHASHSEED']=str(seed_value)
random.seed(seed_value)
np.random.seed(seed_value)
tf.random.set_seed(seed_value)
########## Data pre-processing
housing = fetch_california_housing()
X_train,X_test,y_train,y_test = train_test_split(housing.data,housing.target,train_size=0.8,test_size=0.2)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.fit_transform(X_test)
########## Models synthesis
def build_model():
model = tf.keras.Sequential()
model.add(tf.keras.layers.InputLayer(input_shape=X_train.shape[1:]))
model.add(tf.keras.layers.Batchnormalization(momentum=0.999))
model.add(tf.keras.layers.Dense(48,tf.keras.activations.selu,kernel_initializer="lecun_normal"))
model.add(tf.keras.layers.Batchnormalization(momentum=0.999))
model.add(tf.keras.layers.Dense(48,kernel_initializer="lecun_normal"))
model.add(tf.keras.layers.Batchnormalization(momentum=0.999))
model.add(tf.keras.layers.Dense(1,kernel_initializer="lecun_normal"))
optimizer = tf.keras.optimizers.Adam(learning_rate=0.01)
model.compile(loss="mae",optimizer=optimizer,metrics=["mse"])
return model
dnn_reg = KerasRegressor(model=build_model())
rnd_reg = DecisionTreeRegressor(max_depth=5,min_samples_leaf=1,max_leaf_nodes=9)
rf_reg = RandomForestRegressor(n_estimators=500,max_leaf_nodes=16)
stack_reg = StackingRegressor(estimators=[("rnd",rnd_reg),("rf",rf_reg),("dnn",dnn_reg)],final_estimator=xgboost.XGBRegressor())
param_spec = {
"final_estimator__max_depth": np.arange(1,7).tolist(),"final_estimator__learning_rate": np.arange(3e-4,7e-2).tolist(),}
stack_search_cv = RandomizedSearchCV(stack_reg,param_spec,n_jobs=-1,n_iter=10,cv=5,verbose=True)
stack_search_cv.fit(X_train,y_train)
print(stack_search_cv.best_params_)
print(stack_search_cv.best_score_)
报告所需超参数的以下值
max_depth: 5,learning_rate: 0.0003
。
但是模型的分数是负的。这很奇怪,因为原始模型(包括所有默认值的超参数)的分数是正的。有人可以解释我在这里做错了什么吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。