Не могли бы вы взглянуть на проблему ниже?
1) Чтобы создать прогнозную модель, я разделил данные на 2 набора данных, 70% обучающих наборов и 30% тестовых наборов, используя train_test_split. , И чтобы обеспечить вывод данных с течением времени, когда они отображаются в виде графика, я установил для 'shuffle' значение 'false'.
2) Я подогнал модель по данным поезда и хотел посмотреть на график прогнозируемого результата, который получается из данных испытаний.
3) Для наблюдения за 120-часовыми данными диапазон данных устанавливается равным 120 часам, и результаты этого графика показаны ниже.
Не могли бы вы увидеть, в чем проблема? Кроме того, если я хочу наблюдать диапазон ваших данных от 24 часов до 72 часов, будет ли уместным подход установить их на [24:72]?
import math
import pandas as pd
import numpy as np
import os
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
train_data = pd.read_csv("./input_YG.csv")
nCar = train_data.shape[0]
nVar = train_data.shape[1]
print(nCar, nVar)
feature_columns = list(train_data.columns.difference(['Output_Act']))
X = train_data[feature_columns]
y = train_data['Output_Act']
train_x , test_x, train_y, test_y = train_test_split(X, y, test_size = 0.2, random_state = 42, shuffle = False)
print(train_x.shape, test_x.shape, train_y.shape, test_y.shape)
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
from math import sqrt
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
## sample : 10 max_depth : 5
reg1 = RandomForestRegressor(random_state=1, n_estimators=10, max_depth=5)
reg1_model = reg1.fit(train_x, train_y)
predict1 = reg1_model.predict(test_x) # 학습된 의사결정나무 모형으로 평가 데이터 예측
print("RMSE: {}".format(sqrt(mean_squared_error(predict1, test_y)))) # RMSE 결과
print("MAE: {}".format(mean_absolute_error(predict1, test_y)))
## sample : 100 max_depth : 5
reg2 = RandomForestRegressor(random_state=1, n_estimators=100, max_depth=5)
reg2_model = reg2.fit(train_x, train_y)
predict2 = reg2_model.predict(test_x) # 학습된 의사결정나무 모형으로 평가 데이터 예측
print("RMSE: {}".format(sqrt(mean_squared_error(predict2, test_y)))) # RMSE 결과
print("MAE: {}".format(mean_absolute_error(predict2, test_y)))
## sample : 500 max_depth : 5
reg3 = RandomForestRegressor(random_state=1, n_estimators=500, max_depth=5)
reg3_model = reg3.fit(train_x, train_y)
predict3 = reg3_model.predict(test_x) # 학습된 의사결정나무 모형으로 평가 데이터 예측
print("RMSE: {}".format(sqrt(mean_squared_error(predict3, test_y)))) # RMSE 결과
print("MAE: {}".format(mean_absolute_error(predict3, test_y)))
x = test_x['Hour'][:120]
at = reg1_model.predict(test_x)[:120]
bt = reg2_model.predict(test_x)[:120]
ct = reg3_model.predict(test_x)[:120]
yt = test_y[:120]
plt.figure()
plt.plot(x, yt, 'b', label='Measured Value', linewidth=2)
plt.plot(x, at, 'y', label='RandomForestRegressor_10_5')
plt.plot(x, bt, 'g', label='RandomForestRegressor_100_5')
plt.plot(x, ct, 'k', label='RandomForestRegressor_500_5')
plt.tick_params(axis='x', which='both', bottom=False, top=False,
labelbottom=False)
plt.ylabel('Output_Act')
plt.xlabel('Date')
plt.legend(loc="best")
plt.title('Comparison between measured values and forecasted value')
plt.show()
введите описание изображения здесь
введите описание изображения здесь