history_size = 20 target_size = 0 # 训练集 x_train, y_train = database(inputs_feature.values, 0, train_num, history_size, target_size) # 验证集 x_val, y_val = database(inputs_feature.values, train_num, val_num, history_size, target_size) # 测试集 x_test, y_test = database(inputs_feature.values, val_num, None, history_size, target_size) # 查看数据信息 print('x_train.shape:', x_train.shape) # x_train.shape: (109125, 20, 1)
时间: 2023-11-27 12:04:13 浏览: 54
这段代码是用于构建训练集、验证集和测试集的数据集。其中,history_size 表示过去多少个时间步的数据会被用来预测 target_size 个时间步的数据。在本例中,target_size 被设置为 0,意味着该模型只能预测单个时间步的数据。具体来说,x_train 表示训练集的输入数据,y_train 表示训练集的标签数据。x_val 和 y_val 表示验证集的输入数据和标签数据,x_test 和 y_test 表示测试集的输入数据和标签数据。最后,打印了 x_train 的形状信息,即 (109125, 20, 1),表示 x_train 包含 109125 个样本,每个样本有 20 个时间步,每个时间步只有一个特征。
相关问题
# (5)划分训练集和验证集 # 窗口为20条数据,预测下一时刻 history_size = 20 target_size = 0 # 训练集 x_train, y_train = database(inputs_feature.values, 0, train_num, history_size, target_size) # 验证集 x_val, y_val = database(inputs_feature.values, train_num, val_num, history_size, target_size) # 测试集 x_test, y_test = database(inputs_feature.values, val_num, None, history_size, target_size) # 查看数据信息 print('x_train.shape:', x_train.shape) # x_train.shape: (109125, 20, 1) # (6)构造tf数据集 # 训练集 train_ds = tf.data.Dataset.from_tensor_slices((x_train, y_train)) train_ds = train_ds.shuffle(10000).batch(128) # 验证集 val_ds = tf.data.Dataset.from_tensor_slices((x_val, y_val)) val_ds = val_ds.batch(128) # 查看数据信息 sample = next(iter(train_ds)) print('x_batch.shape:', sample[0].shape, 'y_batch.shape:', sample[1].shape) print('input_shape:', sample[0].shape[-2:]) # x_batch.shape: (128, 20, 1) y_batch.shape: (128,) # input_shape: (20, 1) inputs = keras.Input(shape=sample[0].shape[-2:]) x = keras.layers.LSTM(16, return_sequences=True)(inputs) x = keras.layers.Dropout(0.2)(x) x = keras.layers.LSTM(8)(x) x = keras.layers.Activation('relu')(x) outputs = keras.layers.Dense(1)(x) model = keras.Model(inputs, outputs) model.summary() opt = keras.optimizers.RMSprop(learning_rate=0.001, rho=0.9) model.compile(optimizer=opt, loss='mae', metrics=['mae']) # (9)模型训练 epochs = 100 early_stop = EarlyStopping(monitor='val_loss', patience=5, verbose=1) # 训练模型,并使用 EarlyStopping 回调函数 history = model.fit(train_ds, epochs=epochs, validation_data=val_ds, callbacks=[early_stop]) # (12)预测 y_predict = model.predict(x_test)# 对测试集的特征值进行预测 print(y_predict)详细说说该模型
该模型是一个基于 LSTM 的时序预测模型,用于预测下一时刻的数据。首先,在数据预处理中,使用了窗口为20条数据的方式来构建训练集、验证集和测试集。在模型的构建中,输入的数据形状为(20, 1),经过一个LSTM层,再经过一个Dropout层,再经过一个LSTM层和一个激活函数层,最终输出一个Dense层,输出维度为1,即预测下一时刻的数据。在模型的编译中,使用了RMSprop优化器和MAE损失函数,并且监控了MAE指标。在模型的训练中,使用了EarlyStopping回调函数来防止过拟合,并且训练了100个epoch。最后,在模型的预测中,对测试集的特征值进行预测,并输出预测结果。
import tensorflow.compat.v1 as tf tf.disable_v2_behavior() def get_optimized_results(X_train_scaled,X_test_scaled, y_train,y_test,key="imp_real"): feature_columns = [tf.feature_column.numeric_column('x', shape=X_train_scaled.shape[1:])] train_input = tf.estimator.inputs.numpy_input_fn( x={"x": X_train_scaled}, y=y_train[key], batch_size=50, shuffle=False, num_epochs=None) eval_input = tf.estimator.inputs.numpy_input_fn( x={"x": X_test_scaled}, y=y_test[key], shuffle=False, batch_size=X_test_scaled.shape[0], num_epochs=1) estimator_improve = tf.estimator.DNNRegressor( feature_columns=feature_columns, hidden_units=[300, 100], dropout=0.3, # 1 optimizer=tf.train.ProximalAdagradOptimizer( # 2 learning_rate=0.01, # 3 l1_regularization_strength=0.01, # 4 l2_regularization_strength=0.01) # 5 ) estimator_improve.train(input_fn=train_input,steps=1000) # steps results_generator = estimator_improve.predict(eval_input) results = [result["predictions"][0] for result in results_generator] return results
这段代码是在导入TensorFlow库后,调用其中的旧版本作为默认版本,并定义了一个函数get_optimized_results,此函数用于优化回归模型。函数中使用了TensorFlow的一些功能,例如feature_column来定义特征列,estimator来创建模型实例,inputs来生成模型输入数据等。其中,函数接收训练集和测试集的特征和目标数据,并使用DNNRegressor作为模型,并进行调参,以得到最优的结果。
阅读全文