如题,最后我想输出参数,结果报错:NameError: name 'epochs' is not defined
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, Conv1D, Flatten, MaxPooling1D
from keras.optimizers import adam_v2
from bayes_opt import BayesianOptimization
def cnn_model(num_filters, kernel_size, pool_size, dense_layer_size, epochs, batch_size):
# 加载数据,数据清洗和特征选择
data = pd.read_csv('1.csv', encoding='gb18030')
features = ['Nb%', 'Ti%', 'AL%', 'V%', 'Cr%', 'Mo%', 'C%', 'Mn%', 'P%', 'Ni%', 'Cu%', 'Si%', 'S%', '奥氏体化温度0℃',
'油冷时间0min', '保温时间0min', '上下窜动时间0min', '回火0退火温度0℃', '保温时间0min']
X = data[features]
y = data['硬度']
X = np.nan_to_num(X)
y = np.nan_to_num(y)
scaler = MinMaxScaler() # 特征缩放
X = scaler.fit_transform(X)
pca = PCA(n_components=5) # 选择5个主成分
X_pca = pca.fit_transform(X)
# 数据划分
X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=400)
# 重塑数据为三维数组
X_train = X_train.reshape((X_train.shape[0], X_train.shape[1], 1))
X_test = X_test.reshape((X_test.shape[0], X_test.shape[1], 1))
# 构建卷积神经网络模型
model = Sequential()
model.add(Conv1D(filters=int(num_filters), kernel_size=int(kernel_size), activation='relu',
input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(MaxPooling1D(pool_size=int(pool_size)))
model.add(Flatten())
model.add(Dense(int(dense_layer_size), activation='relu'))
model.add(Dense(1))
# 编译模型
model.compile(optimizer=Adam(), loss='mse')
# 训练模型
history = model.fit(X_train, y_train, epochs=int(epochs), batch_size=int(batch_size),
validation_data=(X_test, y_test), verbose=0)
# 返回最小的验证损失
return -np.min(history.history['val_loss'])
from bayes_opt import BayesianOptimization
from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import load_boston
from sklearn.model_selection import cross_val_score
# 加载数据集
boston = load_boston()
X = boston.data
y = boston.target
# 定义随机森林模型
def rf_cv(n_estimators, min_samples_split, max_features):
"""
定义交叉验证函数
"""
estimator = RandomForestRegressor(
n_estimators=int(n_estimators),
min_samples_split=int(min_samples_split),
max_features=max_features,
random_state=2
)
cval = cross_val_score(estimator, X, y, scoring='neg_mean_squared_error', cv=10)
return cval.mean()
# 定义参数搜索空间
pbounds = {
'n_estimators': (50, 200),
'min_samples_split': (2, 25),
'max_features': (0.1, 1.0)
}
# 初始化贝叶斯优化器
optimizer = BayesianOptimization(
f=rf_cv,
pbounds=pbounds,
random_state=1,
)
# 进行优化
optimizer.maximize(init_points=5, n_iter=20)
# 将优化结果转换为数据框
df = pd.DataFrame.from_dict(optimizer.max, orient='index').T
# 将数据写入 Excel 文件
df.to_excel('optimizer_results.xlsx', index=False)
# 输出最佳参数和对应的交叉验证分数
print(optimizer.max)
print(epochs)
print(batch_size)
print(Dense)
print(filters=int)
print(kernel_size)
很明显最后我想输出的几个量明显是我在程序中优化的量,但是却显示没有定义,不知道如何解决。
