import numpy as np
from sklearn.model_selection import GridSearchCV
from keras.models import Sequential
from keras.layers import Dense
import pandas as pd
import scikeras
from scikeras.wrappers import KerasRegressor
from sklearn.metrics import explained_variance_score
from sklearn.metrics import r2_score
# 构建模型的函数
def create_model():
# 创建模型
model = Sequential()
model.add(Dense(12, input_dim=10, activation='relu'))
model.add(Dense(1))
# 编译模型
model.compile(loss='mse', optimizer='adam')
return model
def print_res(grid_result):
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
means = grid_result.cv_results_['mean_test_score']
stds = grid_result.cv_results_['std_test_score']
params = grid_result.cv_results_['params']
for mean, stdev, param in zip(means, stds, params):
print("%f (%f) with: %r" % (mean, stdev, param))
# 为了复现,设置随机种子
seed = 7
np.random.seed(seed)
datasets=pd.read_excel('NOx原排.xlsx')
df=datasets.values
df = np.array(df)
for i in range(10):
df[:,i] = (df[:,i]-df[:,i].min())/(df[:,i].max()-df[:,i].min())
x_data = df[:,:10]
y_data = df[:,10]
x_data,y_data
# 创建模型
model = KerasRegressor(create_model,verbose=1)
# 定义网格搜索参数
batch_size = [20,40, 60]
epochs = [10, 50, 100]
param_grid = dict(batch_size=batch_size, epochs=epochs)
grid = GridSearchCV(estimator=model, param_grid=param_grid,cv=10,scoring='r2')
grid_result = grid.fit(x_data, y_data)
# 总结结果
print('gsearch1.best_params_', grid.best_params_)
print('gsearch1.best_score_', grid.best_score_)