Python 样本外&;神经网络/长短时记忆(LSTM)的样本内测试;FCNN(全连接神经网络)

Python 样本外&;神经网络/长短时记忆(LSTM)的样本内测试;FCNN(全连接神经网络),python,tensorflow,keras,time-series,prediction,Python,Tensorflow,Keras,Time Series,Prediction,我目前正在为需求预测编写不同的神经网络(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 R

我目前正在为需求预测编写不同的神经网络(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)

由于我的数据集具有不平衡的体积,并且只有3000个样本,因此我使用SVD(合成数据仓库)生成了更多样本(使用SVD PAR=10000个样本)

日期 卷 平均价格 产品_ 国家_ 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