Python ошибка атрибута: у объекта 'int' нет атрибута 'изменить форму' - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь предсказать цены акций, используя python, пытаясь преобразовать набор данных в двумерный массив num для функции 'fit', используя это в качестве ссылки: sklearn Logisti c Регрессия «ValueError: Найден массив с dim 3. Ожидается оценщик <= 2.» </a>

next_day_open_values, nx, ny = next_day_open_values.shape
next_day_open_values = next_day_open_values.reshape((next_day_open_values,nx*ny))
y_normaliser = preprocessing.MinMaxScaler()
y_normaliser.fit((np.expand_dims( next_day_open_values, -1 )))

Я сталкивался с этой ошибкой:

    <ipython-input-42-6ea43c55dc18> in csv_to_dataset(csv_path)
     20 
     21     next_day_open_values, nx, ny = next_day_open_values.shape
---> 22     next_day_open_values = next_day_open_values.reshape((next_day_open_values,nx*ny))
     23     y_normaliser = preprocessing.MinMaxScaler()
     24     y_normaliser.fit((np.expand_dims( next_day_open_values, -1 )))

AttributeError: 'int' object has no attribute 'reshape'

Что пошло не так? Как я могу это исправить? Подробные ответы приветствуются.

Код, приведенный на данный момент, приведен ниже (я использую блокнот Jupyter):

import keras
from keras.models import Model
from keras.layers import Dense, Dropout, LSTM, Input, Activation
from keras import optimizers
import numpy as np
np.random.seed(4)
import tensorflow
tensorflow.random.set_seed(4)
import pandas as pd
from sklearn import preprocessing
import numpy as np

history_points = 50

def csv_to_dataset(csv_path):
    data = pd.read_csv(csv_path)
    data = data.drop('Date', axis=1)
    data = data.drop(0, axis=0)
    data_normaliser = preprocessing.MinMaxScaler()
    data_normalised = data_normaliser.fit_transform(data)
    # using the last {history_points} open high low close volume data points, predict the next open value
    ohlcv_histories_normalised =      np.array([data_normalised[i  : i + history_points].copy() for i in range(len(data_normalised) - history_points)])
    next_day_open_values_normalised = np.array([data_normalised[:,0][i + history_points].copy() for i in range(len(data_normalised) - history_points)])
    next_day_open_values_normalised = np.expand_dims(next_day_open_values_normalised, -1)

    next_day_open_values = np.array([data.iloc[:,0][i + history_points].copy() for i in range(len(data) - history_points)])
    next_day_open_values = np.expand_dims(next_day_open_values_normalised, axis=-1)

    next_day_open_values, nx, ny = next_day_open_values.shape
    next_day_open_values = next_day_open_values.reshape((next_day_open_values,nx*ny))
    y_normaliser = preprocessing.MinMaxScaler()
    y_normaliser.fit((np.expand_dims( next_day_open_values, -1 )))

    assert ohlcv_histories_normalised.shape[0] == next_day_open_values_normalised.shape[0]
    return ohlcv_histories_normalised, next_day_open_values_normalised, next_day_open_values, y_normaliser
#dataset
hlcv_histories, next_day_open_values, unscaled_y, y_normaliser = csv_to_dataset('AMZN1.csv')

test_split = 0.9 # the percent of data to be used for testing
n = int(ohlcv_histories.shape[0] * test_split)

# splitting the dataset up into train and test sets

ohlcv_train = ohlcv_histories[:n]
y_train = next_day_open_values[:n]

ohlcv_test = ohlcv_histories[n:]
y_test = next_day_open_values[n:]

unscaled_y_test = unscaled_y[n:]

Не стесняйтесь исправлять / редактировать это.

Спасибо

1 Ответ

1 голос
/ 10 февраля 2020

Вы предоставляете огромное количество строк кода, но на самом деле это сводится к одной проблеме: вы извлекаете 3 целых числа из next_day_open_values, nx, ny = next_day_open_values.shape. При изменении формы Numpy ожидается, что в качестве входных данных будет использоваться массив, а не целое число или одно значение.

Параметры: numpy .reshape (a, newshape, order = 'C')

a: array_like - Массив, подлежащий изменению.

Я сомневаюсь, что вы пытаетесь получить вектор из одного целого числа, повторяющегося для формы nx*ny. Кроме того, если вы превратите входные данные в массив и выполните ту же операцию, вы столкнетесь с ValueError, потому что вы не сможете преобразовать массив размера 1 в конкретную c форму.

Я верю, что это может сработать, но я не знаю, что такое next_day_open_values:

next_day_open_values_s, nx, ny = next_day_open_values.shape
next_day_open_values = next_day_open_values.reshape(next_day_open_values_s,nx*ny)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...