Python ValueError.Не понимаю ошибки или как исправить - PullRequest
0 голосов
/ 25 апреля 2019

Я следую учебному пособию здесь; https://www.analyticsvidhya.com/blog/2018/10/predicting-stock-price-machine-learningnd-deep-learning-techniques-python/#comment-155692

Вместо того, чтобы использовать предоставленный набор данных, я использую тот, который необходим для моего назначения.

Используемый код

#import packages
import pandas as pd
import numpy as np

#to plot within notebook
import matplotlib.pyplot as plt
%matplotlib inline

#setting figure size
from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 20,10

#for normalizing data
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))

#read the file
df = pd.read_csv('C:/Users/Usert/Downloads/stock-20050101-to-20171231/stock-20050101-to-20171231/IBM_2006-01-01_to_2018-01-01.csv')

#print the head
df.head()

#setting index as date
df['Date'] = pd.to_datetime(df.Date,format='%Y-%m-%d')
df.index = df['Date']

#plot
plt.figure(figsize=(16,8))
plt.plot(df['Close'], label='Close Price history')

#creating dataframe with date and the target variable
data = df.sort_index(ascending=True, axis=0)
new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])

for i in range(0,len(data)):
     new_data['Date'][i] = data['Date'][i]
     new_data['Close'][i] = data['Close'][i]

#splitting into train and validation
train = new_data[:987]
valid = new_data[987:]

new_data.shape, train.shape, valid.shape
((1235, 2), (987, 2), (248, 2))

train['Date'].min(), train['Date'].max(), valid['Date'].min(), valid['Date'].max()


#make predictions
preds = []
for i in range(0,248):
    a = train['Close'][len(train)-248+i:].sum() + sum(preds)
    b = a/248
    preds.append(b)

#calculate rmse
rms=np.sqrt(np.mean(np.power((np.array(valid['Close'])-preds),2)))
rms

#plot
valid['Predictions'] = 0
valid['Predictions'] = preds
plt.plot(train['Close'])
plt.plot(valid[['Close', 'Predictions']])

Работает нормально до "#Calculate RMSE", когда обнаруживает ошибку.

File "<ipython-input-92-1256d885493e>", line 65, in <module>
rms=np.sqrt(np.mean(np.power((np.array(valid['Close'])-preds),2)))

ValueError: operands could not be broadcast together with shapes (2033,) (248,) 

Использование "print (valid.shape)" и "print (len (preds))" по запросу возвращает "(604, 3)" и "248".

Есть идеи, как мне изменить числа, чтобы они соответствовали моему набору данных, так как каждый раз, когда я меняю числа, я создаю больше ошибок?

Просто к вашему сведению;

Набор данных, который я использую, содержит 7 столбцов с именами «Дата, Открыть, Высокий, Низкий, Закрыть, Объем и Имя» с 3021 строкой данных, включая заголовки.

В то время как один в учебнике имеет 8 столбцов: «дата, открытый, высокий, низкий, последний, закрытый, total_trade_quantity и обороты» с 1236 строками, включая заголовки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...