import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from keras.models import Sequential
from keras.layers import SimpleRNN, Dense
# Load data
df = pd.read_csv("bitcoin.csv", parse_dates=["Date"], index_col="Date")
data = df[["Close"]].values
# Normalize + prepare dataset
scaler = MinMaxScaler()
scaled = scaler.fit_transform(data)
def make_dataset(seq, step=60):
X, y = [], []
for i in range(step, len(seq)):
X.append(seq[i-step:i, 0])
y.append(seq[i, 0])
return np.array(X), np.array(y)
X, y = make_dataset(scaled)
X = X.reshape((X.shape[0], X.shape[1], 1))
# Build model
model = Sequential([
SimpleRNN(50, input_shape=(X.shape[1], 1)),
Dense(1)
])
model.compile(optimizer="adam", loss="mse")
model.fit(X, y, epochs=20, batch_size=32, verbose=1)
# Predict
pred = scaler.inverse_transform(model.predict(X))
actual = scaler.inverse_transform(y.reshape(-1, 1))
# Plot
plt.plot(actual, label="Actual")
plt.plot(pred, label="Predicted")
plt.title("Bitcoin Price Prediction (RNN)")
plt.legend()
plt.show()
# Evaluate
rmse = np.sqrt(mean_squared_error(actual, pred))
print("RMSE:", rmse)