python - 神经网络中的样本外和样本内测试/长短期记忆 (LSTM) 和 FCNN(全连接神经网络)
问题描述
我目前正在为需求预测编写不同的神经网络(LSTM 和 RNN)。因此,我为我的 FCNN 设置了以下代码:
from numpy.random import seed
seed(1)
from tensorflow import set_random_seed
set_random_seed(2)
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.callbacks import EarlyStopping
from RegscorePy import *
early_stopping = EarlyStopping()
from keras.optimizers import SGD
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import Adam
from numpy.random import seed
seed(1)
from tensorflow import set_random_seed
set_random_seed(2)
X = new_data[['Volume_MT','Avg_Price_per_kg','Product_']]
y = new_data['Volume_MT'].values
sc= MinMaxScaler()
X = sc.fit_transform(X)
y = y.reshape(-1,1)
y =sc.fit_transform(y)
## Train test split follows this distinguished code pattern and helps creating train and test set to build machine learning.
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.2, random_state = 0)
X_train.shape, y_train.shape, X_test.shape, y_test.shape
# Manual Optimization to review behaviour
epochs = 200
batch_size=150
patience_early_stopping = 3
neurons_L1 = 2
neurons_L2 = 350
neurons_L3 = 120
# Base Model
model = Sequential()
model.add(Dense(neurons_L1, input_dim=3, activation='relu'))
model.add(Dense(neurons_L2,activation='linear'))
model.add(Dense(neurons_L3,activation='relu'))
model.add(Dense(1,activation='linear'))
#Compile & Adapt
opt='adam'
model.compile(loss='mean_absolute_error', optimizer=opt, metrics=['mse'])
es = EarlyStopping(monitor='val_loss',mode='min',verbose=1,patience=patience_early_stopping)
#Fit Model
history = model.fit(X_train,y_train,validation_data=(X_test,y_test),epochs=epochs,batch_size = batch_size, verbose = 2 , callbacks=[es])
#Prediction
y_pred = model.predict(X_test)
expected = df_final['Volume_MT']
predicted= df_final['Volume_pred']
mae_FCNN = mean_absolute_error(expected, predicted)
mse_FCNN = mean_squared_error(expected, predicted)
r2_FCNN= r2_score(expected, predicted)
mape_FCNN = np.mean(np.abs(expected - predicted)/np.abs(expected))
FCCN_baseline_mae = metrics.mean_absolute_error(df.Volume_MT, df.Volume_pred)
FCNN_baseline_mse = np.sqrt(metrics.mean_squared_error(df.Volume_MT, df.Volume_pred))
FCNN_baseline_r2= r2_score(df.Volume_MT, df.Volume_pred)
FCNN_baseline_train_time = round(stop-start,2)
# AIC &BIC
p = n
b = bic.bic(df.Volume_MT, df.Volume_pred, p)
a = aic.aic(df.Volume_MT, df.Volume_pred, p)
print('FCNN_Baseline_MAE:', mae_FCNN)
print('FCNN_Baseline_Mean_Square_Error:', mse_FCNN)
print('FCNN_Baseline_R2-Score:', r2_FCNN)
print('FCNN_Baseline_AIC:', a)
print('FCNN_Baseline_BIC:', b)
df.plot()
df.tail(10)
由于我的数据集 Volume_MT 不平衡并且只有 3000 个样本,我使用 SVD(合成数据库)生成更多样本 = 10.000 个使用 SVD PAR 的样本)。
日期 | 体积_MT | 平均价格 | 产品_ | 国家_ |
---|---|---|---|---|
2015-06-01 | 22.91 | 3.01 | 26 | 15 |
2015-06-01 | 26.29 | 3.26 | 26 | 16 |
2015-08-01 | 31.43 | 3.19 | 26 | 5 |
2015-09-01 | 32.69 | 3.22 | 26 | 16 |
2015-09-01 | 33.54 | 3.22 | 26 | 16 |
2015-09-01 | 34.73 | 3.22 | 26 | 16 |
我的问题是:
- 如何使用真实的样本外数据(3000 个样本)与合成数据来测试我的神经网络?
- 如何将我的预测绘制为时间序列图?
- 如何重新调整我的预测并将它们显示在真实测试样本的通用数据框中?
你可以在上面看到我是怎么做的。这还不够。
解决方案
推荐阅读
- flutter - Flutter PageView 内存泄漏
- java - 使用 GraalVM Native Image 代替混淆
- java - 无法访问“org.gradle.api.artifacts.dsl.DependencyHandler”的超类型“java.lang.Object”
- python - 为什么 dict.pop() 在这里从两个字典中删除值而只指定一个?
- python - 使用 numpy Where 的多个 OR 条件
- r - RStudio:将单个数据框从一个项目文件夹复制到另一个?
- macos - 谁能告诉如何在 m1 MacBook Air 中安装 gcc?
- android - 问题:现在制作一个闹钟应用程序。所以,总结一下,现在有什么方法可以让我制作一个实际可行的警报应用程序吗?
- ffmpeg - 在 QuickTime 中无法播放视频格式为 qtrle 的透明电影
- flutter - Flutter ListView 在底部弹跳但不在顶部弹跳(iOS)