У меня есть вопрос, который я не могу решить, и я действительно не понимаю, что происходит.
У меня есть оригинальный набор данных lrdata4
year total_vehicles
0 2000 419587299
1 2001 425832533
2 2002 430480581
3 2003 434270003
4 2004 442680113
from statsmodels.tools.eval_measures import rmse
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.preprocessing.sequence import TimeseriesGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import LSTM
from tensorflow.keras.layers import Dropout
import warnings
warnings.filterwarnings('ignore')
Когда я делаю это
lrdata4.year = pd.to_datetime(lrdata4.year)
lrdata4 = lrdata4.set_index('year')
lrdata4.tail(10)
Годы меняются, и я не знаю почему. Любая помощь?
total_vehicles
year
1970-01-01 00:00:00.000002009 443333980
1970-01-01 00:00:00.000002010 438827716
1970-01-01 00:00:00.000002011 440461505
1970-01-01 00:00:00.000002012 440073277
1970-01-01 00:00:00.000002013 441751395
1970-01-01 00:00:00.000002014 451394270
1970-01-01 00:00:00.000002015 460050397
1970-01-01 00:00:00.000002016 470256985
1970-01-01 00:00:00.000002017 474693803
1970-01-01 00:00:00.000002018 473765568
Итак, я готовлю модель к прогнозу временного ряда
train, test = lrdata4[:-12], lrdata4[-12:]
enter code herescaler = MinMaxScaler()
scaler.fit(train)
train = scaler.transform(train)
test = scaler.transform(test)
n_input = 24
n_features = 1
generator = TimeseriesGenerator(train, train, length = n_input, batch_size =1000)
model = Sequential()
model.add(LSTM(200, activation= 'relu', input_shape=(n_input, n_features)))
model.add(Dropout(0.15))
model.add(Dense(1))
model.compile(optimizer='adam', loss ='mse')
model.fit_generator(generator, epochs=20)
Я получаю прогнозы и добавляю их в список
pred_list = []
batch = train[-n_input:].reshape((1 ,n_input, n_features))
for i in range(n_input):
pred_list.append(model.predict(batch)[0])
batch = np.append(batch[:, 1:,:],[[pred_list[i]]], axis=1)
И я пытаюсь объединить мой исходный кадр данных lrdata4 и новый кадр данных df_predict
df_predict = pd.DataFrame(scaler.inverse_transform(pred_list), index= lrdata4[-n_input:].index,columns=['Predictions'])
df_test = pd.concat([lrdata4, df_predict], axis = 1)
Но конкат длится вечно. Я оставил это в течение 4 часов, и это все еще продолжалось. Это потому, что в моем исходном наборе данных содержится 200 тыс. Данных? Есть ли другой способ сделать это?
Я пытался построить их по-другому, как это
plt.figure(figsize= (20,5))
plt.plot(lrdata4.index, lrdata4['total_vehicles'])
plt.plot(df_predict.index, df_predict['Predictions'], color ='r')
plt.show()
, но график не является линейным графиком с исходными данными и прогнозными данными в виде непрерывного линейного графика, а годы неверны, что я не понимаю, почему Так выглядит график