Asiedu
Asiedu

Reputation: 1

why am I am getting an the: sns.lineplot(x=anomaly_df['Date'], y=scaler.inverse_transform(anomaly_df['Close/Last']))

import numpy as np
from keras.models import Sequential 
from keras.layers import LSTM, Input, Dropout
from keras.layers import Dense
from keras.layers import RepeatVector
from keras.layers import TimeDistributed
import pandas as pd 
from matplotlib import pyplot as plt
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from keras.models import Model
import seaborn as sns

dataframe = pd.read_csv('spxMoreData.csv')
df = dataframe[['Date', 'Close/Last']]
df['Date'] = pd.to_datetime(df['Date'])

#print(df['Close/Last'].dtype) 

sns.lineplot(x=df['Date'], y=df['Close/Last'])
plt.show()

print("Start date is: ", df['Date'].min())
print("End date is: ", df['Date'].max())

#Change train data from mid 2022....seems to be a jump early 2022
train, test = df.loc[df['Date'] <= '2022-01-03'], df.loc[df['Date'] > '2022-01-03']

#Scaler
scaler = StandardScaler()
scaler = scaler.fit(train[['Close/Last']])

train['Close/Last'] = scaler.transform(train[['Close/Last']])
test['Close/Last'] = scaler.transform(test[['Close/Last']])

# Number of time steps to look back
# Larger sequences (look further back) may improve forecasting
seq_size = 30

def to_sequences(x, y, seq_size=1):
    x_values = []
    y_values = []
    
    for i in range(len(x)-seq_size):
        #print(i)
        x_values.append(x.iloc[i:(i+seq_size)].values)
        y_values.append(y.iloc[i+seq_size])
    
    return np.array(x_values), np.array(y_values)

trainX, trainY = to_sequences(train[['Close/Last']], train['Close/Last'], seq_size)
testX, testY = to_sequences(test[['Close/Last']], test['Close/Last'], seq_size)

# Try a model
model = Sequential()
model.add(LSTM(128, input_shape =(trainX.shape[1], trainX.shape[2])))
model.add(Dropout(rate=0.2))

model.add(RepeatVector(trainX.shape[1]))

model.add(LSTM(128, return_sequences=True))
model.add(Dropout(rate=0.2))
model.add(TimeDistributed(Dense(trainX.shape[2])))
model.compile(optimizer='adam', loss='mae')
model.summary()

#fit model
history = model.fit(trainX, trainY, epochs=10, batch_size=32, validation_split=0.1, verbose=1)

plt.plot(history.history['loss'], label='Training loss')
plt.plot(history.history['val_loss'], label='Validation loss')
plt.legend()
plt.show()

# mean absolute error
trainPredict = model.predict(trainX)
trainMAE = np.mean(np.abs(trainPredict - trainX), axis=1)
plt.hist(trainMAE, bins=30)
max_trainMAE = 0.3 # or define 90% value of max as threshold.
plt.show()

testPredict = model.predict(testX)
testMAE = np.mean(np.abs(testPredict - testX), axis=1)
plt.hist(testMAE, bins=30)

# lets capture the anomaly
#Capture all details in a Dataframe for easy plotting
anomaly_df = pd.DataFrame(test[seq_size:])
anomaly_df['testMAE'] = testMAE
anomaly_df['max_trainMAE'] = max_trainMAE
anomaly_df['anomaly'] = anomaly_df['testMAE'] > anomaly_df['max_trainMAE']
anomaly_df['Close/Last'] = test[seq_size:]['Close/Last']

#plot testMAE vs max_trainMAE
sns.lineplot(x=anomaly_df['Date'], y=anomaly_df['testMAE'])
sns.lineplot(x=anomaly_df['Date'], y=anomaly_df['max_trainMAE'])
plt.show()

anomalies = anomaly_df.loc[anomaly_df['anomaly']== True]


#plot anomalies
sns.lineplot(x=anomaly_df['Date'],y=scaler.inverse_transform(anomaly_df['Close/Last']))
sns.scatterplot(x=anomalies['Date'],y=scaler.inverse_transform(anomalies['Close/Last']), color='r')

when I get to the last part and I run the code it gives me error. I am using python spyder.

#plot anomalies
sns.lineplot(x=anomaly_df['Date'], y=scaler.inverse_transform(anomaly_df['Close/Last']))
sns.scatterplot(x=anomalies['Date'],y=scaler.inverse_transform(anomalies['Close/Last']), color='r')

when I run this last part of my code I get this error:

ValueError: Expected a 2-dimensional container but got <class 'pandas.core.series.Series'> instead. Pass a DataFrame containing a single row (i.e. single sample) or a single column (i.e. single feature) instead.

How can I fix this?

Upvotes: 0

Views: 34

Answers (0)

Related Questions