shaheerawan3 commited on
Commit
ae0dbb8
·
verified ·
1 Parent(s): 22f4008

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -16
app.py CHANGED
@@ -23,14 +23,16 @@ class PriceScaler:
23
  self.scaler = MinMaxScaler()
24
 
25
  def fit_transform(self, data):
26
- # Reshape data to 2D array
27
- reshaped_data = np.array(data).reshape(-1, 1)
28
- return self.scaler.fit_transform(reshaped_data).ravel()
 
29
 
30
  def inverse_transform(self, data):
31
- # Reshape data to 2D array
32
- reshaped_data = np.array(data).reshape(-1, 1)
33
- return self.scaler.inverse_transform(reshaped_data).ravel()
 
34
 
35
  class CryptoPredictor(nn.Module):
36
  def __init__(self, input_dim: int, hidden_dim: int = 128, num_layers: int = 2, dropout: float = 0.2):
@@ -130,10 +132,11 @@ class CryptoAnalyzer:
130
  return df.iloc[-days:]
131
 
132
  def prepare_data(self, df: pd.DataFrame, lookback: int) -> Tuple[torch.Tensor, torch.Tensor]:
 
133
  features = df[self.feature_columns].values
134
  scaled_features = self.scaler.fit_transform(features)
135
 
136
- # Handle close prices
137
  close_prices = df['Close'].values
138
  scaled_close = self.price_scaler.fit_transform(close_prices)
139
 
@@ -143,7 +146,7 @@ class CryptoAnalyzer:
143
  y.append(scaled_close[i + lookback])
144
 
145
  X = torch.FloatTensor(np.array(X)).to(self.device)
146
- y = torch.FloatTensor(np.array(y)).to(self.device)
147
 
148
  return X, y
149
 
@@ -199,7 +202,7 @@ class CryptoAnalyzer:
199
  try:
200
  df = self.get_data(symbol, days)
201
  X, y = self.prepare_data(df, lookback)
202
-
203
  model_path = self.get_model_path(symbol)
204
  if os.path.exists(model_path):
205
  model = CryptoPredictor(X.shape[2]).to(self.device)
@@ -207,19 +210,18 @@ class CryptoAnalyzer:
207
  else:
208
  model = self.train_model(X, y, symbol)
209
  joblib.dump(self.scaler, self.get_scaler_path(symbol))
210
-
211
  model.eval()
212
  with torch.no_grad():
213
  predictions, confidence = model(X)
214
- predictions = predictions.cpu().numpy()
215
- confidence = confidence.cpu().numpy()
216
 
217
- # Ensure predictions are 1D before inverse transform
218
- predictions = predictions.reshape(-1)
219
  predictions = self.price_scaler.inverse_transform(predictions)
220
 
221
- # Handle actual values similarly
222
- y_np = y.cpu().numpy().reshape(-1)
223
  actual_prices = self.price_scaler.inverse_transform(y_np)
224
 
225
  rmse = float(np.sqrt(np.mean((actual_prices - predictions) ** 2)))
 
23
  self.scaler = MinMaxScaler()
24
 
25
  def fit_transform(self, data):
26
+ # Ensure data is 2D for fitting
27
+ data_2d = np.array(data).reshape(-1, 1)
28
+ # Transform and return 1D array
29
+ return self.scaler.fit_transform(data_2d).flatten()
30
 
31
  def inverse_transform(self, data):
32
+ # Ensure data is 2D for inverse transform
33
+ data_2d = np.array(data).reshape(-1, 1)
34
+ # Transform and return 1D array
35
+ return self.scaler.inverse_transform(data_2d).flatten()
36
 
37
  class CryptoPredictor(nn.Module):
38
  def __init__(self, input_dim: int, hidden_dim: int = 128, num_layers: int = 2, dropout: float = 0.2):
 
132
  return df.iloc[-days:]
133
 
134
  def prepare_data(self, df: pd.DataFrame, lookback: int) -> Tuple[torch.Tensor, torch.Tensor]:
135
+ # Scale features
136
  features = df[self.feature_columns].values
137
  scaled_features = self.scaler.fit_transform(features)
138
 
139
+ # Scale close prices - ensure 1D output
140
  close_prices = df['Close'].values
141
  scaled_close = self.price_scaler.fit_transform(close_prices)
142
 
 
146
  y.append(scaled_close[i + lookback])
147
 
148
  X = torch.FloatTensor(np.array(X)).to(self.device)
149
+ y = torch.FloatTensor(np.array(y)).reshape(-1).to(self.device)
150
 
151
  return X, y
152
 
 
202
  try:
203
  df = self.get_data(symbol, days)
204
  X, y = self.prepare_data(df, lookback)
205
+
206
  model_path = self.get_model_path(symbol)
207
  if os.path.exists(model_path):
208
  model = CryptoPredictor(X.shape[2]).to(self.device)
 
210
  else:
211
  model = self.train_model(X, y, symbol)
212
  joblib.dump(self.scaler, self.get_scaler_path(symbol))
213
+
214
  model.eval()
215
  with torch.no_grad():
216
  predictions, confidence = model(X)
217
+ predictions = predictions.cpu().numpy().flatten() # Ensure 1D
218
+ confidence = confidence.cpu().numpy().flatten() # Ensure 1D
219
 
220
+ # Inverse transform predictions
 
221
  predictions = self.price_scaler.inverse_transform(predictions)
222
 
223
+ # Inverse transform actual values
224
+ y_np = y.cpu().numpy().flatten() # Ensure 1D
225
  actual_prices = self.price_scaler.inverse_transform(y_np)
226
 
227
  rmse = float(np.sqrt(np.mean((actual_prices - predictions) ** 2)))