Читать книгу 120 практических задач онлайн
data = pd.read_csv('stock_prices.csv')
# Выбираем интересующие нас столбцы, например, 'Close'
prices = data['Close'].values.reshape(-1, 1)
# Нормализация данных
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_prices = scaler.fit_transform(prices)
# Создание последовательностей для обучения модели
def create_sequences(data, sequence_length):
sequences = []
targets = []
for i in range(len(data) – sequence_length):
sequences.append(data[i:i + sequence_length])
targets.append(data[i + sequence_length])
return np.array(sequences), np.array(targets)
sequence_length = 60 # 60 дней
X, y = create_sequences(scaled_prices, sequence_length)
# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)
# Шаг 3: Построение модели RNN
model = models.Sequential()
model.add(layers.LSTM(50, return_sequences=True, input_shape=(sequence_length, 1)))
model.add(layers.LSTM(50, return_sequences=False))
model.add(layers.Dense(25))
model.add(layers.Dense(1))
# Шаг 4: Компиляция и обучение модели
model.compile(optimizer='adam', loss='mean_squared_error')
history = model.fit(X_train, y_train, batch_size=32, epochs=10,
validation_data=(X_test, y_test))
# Шаг 5: Оценка модели
predictions = model.predict(X_test)
predictions = scaler.inverse_transform(predictions)
# Визуализация результатов
plt.figure(figsize=(10, 6))
plt.plot(data.index[:len(data) – len(y_test)], scaler.inverse_transform(scaled_prices[:len(scaled_prices) – len(y_test)]), color='blue', label='Исторические данные')
plt.plot(data.index[len(data) – len(y_test):], scaler.inverse_transform(scaled_prices[len(scaled_prices) – len(y_test):]), color='orange', label='Истинные значения')
plt.plot(data.index[len(data) – len(y_test):], predictions, color='red', label='Прогнозы')
plt.xlabel('Дата')
plt.ylabel('Цена акции')
plt.legend()
plt.show()
```
Пояснение
1. Импорт библиотек: Импортируются необходимые библиотеки, включая TensorFlow, Keras, pandas и matplotlib.