【问题标题】:ValueError: Data cardinality is ambiguous: x sizes: 1975 y sizes: 1 Make sure all arrays contain the same number of samplesValueError:数据基数不明确:x 大小:1975 y 大小:1 确保所有数组包含相同数量的样本
【发布时间】:2022-10-07 00:53:09
【问题描述】:

我在 colab 上运行它,我试图让它预测股票走势。我正在学习一个教程,但我对 python 不是很熟悉。

#Imports
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
url = \'https://raw.githubusercontent.com/mwitiderrick/stockprice/master/NSE-TATAGLOBAL.csv\'
dataset_train = pd.read_csv(url)
training_set = dataset_train.iloc[:, 1:2].values
dataset_train.head()

#Data Normalization
from sklearn.preprocessing import MinMaxScaler
sc = MinMaxScaler(feature_range=(0,1))
training_set_scaled = sc.fit_transform(training_set)

#Incorporating Timesteps Into Data
X_train = []
y_train = []
for i in range(60, 2035):
  X_train.append(training_set_scaled[i-60:i, 0])
y_train.append(training_set_scaled[i, 0])
X_train, y_train = np.array(X_train), np.array(y_train)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))

#Creating the LSTM Model
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dropout
from keras.layers import Dense

model = Sequential()
model.add(LSTM(units=50,return_sequences=True,input_shape=(X_train.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(units=50,return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=50,return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(units=1))
model.compile(optimizer=\'adam\',loss=\'mean_squared_error\')
model.fit(X_train,y_train,epochs=100,batch_size=32)

#Making Predictions on the Test Set
url = \'https://raw.githubusercontent.com/mwitiderrick/stockprice/master/tatatest.csv\'
dataset_test = pd.read_csv(url)
real_stock_price = dataset_test.iloc[:, 1:2].values

dataset_total = pd.concat((dataset_train[\'Open\'], dataset_test[\'Open\']), axis = 0)
inputs = dataset_total[len(dataset_total) - len(dataset_test) - 60:].values
inputs = inputs.reshape(-1,1)
inputs = sc.transform(inputs)
X_test = []
for i in range(60, 76):
  X_test.append(inputs[i-60:i, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
predicted_stock_price = model.predict(X_test)
predicted_stock_price = sc.inverse_transform(predicted_stock_price)

#Plotting the Results
plt.plot(real_stock_price, color = \'black\', label = \'TATA Stock Price\')
plt.plot(predicted_stock_price, color = \'green\', label = \'Predicted TATA Stock Price\')
plt.title(\'TATA Stock Price Prediction\')
plt.xlabel(\'Time\')
plt.ylabel(\'TATA Stock Price\')
plt.legend()
plt.show()

错误:

ValueError:数据基数不明确:
x 尺寸:1975
y 尺寸:1
确保所有阵列都包含相同数量的样本。

  • 问题是y_train.append(training_set_scaled[i, 0])for i in range(60, 2035) 循环之外,这就是为什么它只包含1 个样本而不是1975。你只需要修复缩进。

标签: python numpy tensorflow keras lstm


【解决方案1】:

您的代码中存在缩进错误。请按如下方式更正它并再次尝试运行您的代码:

for i in range(60, 2035):
  X_train.append(training_set_scaled[i-60:i, 0])
  y_train.append(training_set_scaled[i, 0])  # Corrected, The indentation error
X_train, y_train = np.array(X_train), np.array(y_train)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
print(X_train.shape)
print(y_train.shape)

输出:

(1975, 60, 1)
(1975,)

整个代码的输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2023-03-23
    • 2021-02-07
    • 2021-07-25
    • 2022-11-11
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多