Уведомления

Группа в Telegram: @pythonsu

#1 Июль 23, 2020 21:52:08

Antonio0608
Зарегистрирован: 2020-05-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Анализ, предсказание следующего шага последовательности.

Доброго времени.

Как предсказать следующий шаг последовательности.

Например есть последовательность.

112233112233112233…….

или

111211312111211312…….

Последовательность может быть любая.

Но как обучить нейронную сеть чтобы она определяла следующий шаг последовательности.

есть такой код.

Но эта нейронная сеть не предсказывает следующий шаг, а повторяет предидущии.

А как это исправить я не понимаю.

Может есть тут знатоки которые помогут решить задачу.

 import numpy
import pandas as pd
import math
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from sklearn.metrics import accuracy_score
# convert an array of values into a dataset matrix
def create_dataset(dataset, look_back):
        dataX, dataY = [], []
        for i in range(len(dataset)-look_back-1):
                xset = []
                for j in range(dataset.shape[1]):
                        a = dataset[i:(i+look_back), j]
                        xset.append(a)
                dataX.append(xset)
                dataY.append(dataset[i + look_back,0])
        return numpy.array(dataX), numpy.array(dataY)
# fix random seed for reproducibility
numpy.random.seed(1)
# load the dataset
file='test123456.xlsx'
xl=pd.ExcelFile(file)
dataframe = xl.parse('Sheet1')
dataset = dataframe.values
dataset = dataset.astype('float32')
# normalize the dataset
scaler = MinMaxScaler(feature_range=(0,1))
dataset = scaler.fit_transform(dataset)
# split into train and test sets
train_size = int(len(dataset) * 0.75)
test_size = len(dataset) - train_size
train, test = dataset[0:train_size,:],dataset[train_size:len(dataset),:]
# reshape into X=t and Y=t+1
look_back = 1
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)
# reshape input to be [samples, time steps, features]
trainX = numpy.reshape(trainX, (trainX.shape[0],1,trainX.shape[1]))
testX = numpy.reshape(testX, (testX.shape[0],1,testX.shape[1]))                           
# create and fit the LSTM network
model = Sequential()
model.add(LSTM(8, input_shape=(1, look_back)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='Adam')
model.fit(trainX, trainY, epochs=10000, batch_size=1, verbose=2)
# make predictions
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
# invert predictions
trainPredict = scaler.inverse_transform(trainPredict)
trainY = scaler.inverse_transform([trainY])
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform([testY])
#
print("X=%s, Predicted=%s" % (testPredict[-1],testX[-1]))
print("X=%s, Predicted=%s" % (testPredict[0],testX[0]))

Буду презнателен за любую помощь.

Офлайн

#2 Июль 24, 2020 08:53:12

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Анализ, предсказание следующего шага последовательности.

Antonio0608
Последовательность может быть любая.
Если вы говорите любая, то например может быть и случайная последовательность.

Правда жизни такова что в последовательности может быть закономерность а может и не быть ее. В этом случае принципиально невозможно предсказать следующее значение.

Начинать надо с оценки энтропии потока данных, предварительно выяснив каковы сообщения (где их границы в потоке байт).



Офлайн

#3 Июль 24, 2020 16:50:33

Antonio0608
Зарегистрирован: 2020-05-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Анализ, предсказание следующего шага последовательности.

Мне кажется последовательность может быть любой.
Главное я не могу понять как обучить нейросеть. Анализировать, искать паттерны и делать прогноз.
в интернете есть много о прогнозировании временных рядов, но чаще все сводится к регрессии, или просто от среднего.
а вот как научить нейросеть работать с чистыми последовательстями. например последовательность Фиббоначи или любыми другими. Может нейросеть сама понять что это последовательность а не простой набор символов. не обязательно это могут быть цифры или буквы и т.д.

Офлайн

#4 Июль 24, 2020 17:16:40

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Анализ, предсказание следующего шага последовательности.

Antonio0608
Может нейросеть сама понять что это последовательность а не простой набор символов

Нейросеть ничего не может понять. Ошибочно путать нейросеть с искуственным интеллектом. Я понимаю так, что нейросети - это способ численного решения задачи, при котором строится универсальная формула путем подбора коэффициентов дающих минимальную погрешность для данной обучающей выборки. У вас задача, которую я не представляю как решить численно, это сугубо аналитическая задача.



Офлайн

#5 Июль 24, 2020 17:29:36

Antonio0608
Зарегистрирован: 2020-05-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Анализ, предсказание следующего шага последовательности.

Грубо говоря.
Нейросеть не способна на основе предидущих событий сделать прогноз.
так я понимаю.
это же ерунда.
Даже этот код способен делать предсказание но только для последовательности
123123123123……
но это больше не предсказание а перебор предидущих вариантов.

Офлайн

#6 Июль 24, 2020 18:17:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Анализ, предсказание следующего шага последовательности.

Antonio0608
Нейросеть не способна на основе предидущих событий сделать прогноз.
так я понимаю.
это же ерунда.

Нейросеть может сделать прогноз.

Antonio0608
Может нейросеть сама понять что это последовательность а не простой набор символов

Нейросеть не может сама понять, что ваши данные представляют собой осмысленную последовательность.

нейросеть вам даст каой-то прогноз с некой вероятностью. Нейросеть никогда не дает точного аналитического результата. Вы даже квадратные уравнения можете решать нейросетью. Если вы скормите нейросети некоторое количество коэффициентов квадратного уравнения и соответствующих корней, то ваша нейросеть будет довольно точно подбирать решение на коэффициентах близких к вашей обучающей выборке. Но нейросеть никогда не придет к формуле (-b + sqr(D)) / 2a и никогда не даст точного результата. Ровно так же нейросеть не ответит на вопрос, по какому закону строится та или иная последовательность.



Офлайн

#7 Июль 24, 2020 18:45:58

Antonio0608
Зарегистрирован: 2020-05-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Анализ, предсказание следующего шага последовательности.

Я понимаю это.
Почему мой код, не делает предсказание следующего шага? А просто перебирает предидущие.
Меняя настроики нейросети. Предсказание остается одно и тоже.
Где ошибка в моем коде?
В файле ексель.
Последовательность
112233112233112233112233…. и так повторяется пару сотню десятков раз.



Офлайн

#8 Июль 25, 2020 14:18:29

Antonio0608
Зарегистрирован: 2020-05-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Анализ, предсказание следующего шага последовательности.

С экспертами видно недобор на форуме.
Может легче разобрать код по частям.
Вот у меня вопрос.
Почему если менять параметры в первой части кода, то это не влияет на конечный результат.
например.
тут 0

 def create_dataset(dataset, look_back=0):
        dataX, dataY = [], []
        for i in range(len(dataset)-look_back-1):
                xset = []
                for j in range(dataset.shape[1]):
                        a = dataset[i:(i+look_back), j]
                        xset.append(a)
                dataX.append(xset)
                dataY.append(dataset[i + look_back,0])
        return numpy.array(dataX), numpy.array(dataY)
X=[2.0298948], Predicted=[[0.5]]
X=[2.2400405], Predicted=[[1.]]
тут -1
 def create_dataset(dataset, look_back=-1):
        dataX, dataY = [], []
        for i in range(len(dataset)-look_back-1):
                xset = []
                for j in range(dataset.shape[1]):
                        a = dataset[i:(i+look_back), j]
                        xset.append(a)
                dataX.append(xset)
                dataY.append(dataset[i + look_back,0])
        return numpy.array(dataX), numpy.array(dataY)
X=[2.0298948], Predicted=[[0.5]]
X=[2.2400405], Predicted=[[1.]]
тут 1
 def create_dataset(dataset, look_back=1):
        dataX, dataY = [], []
        for i in range(len(dataset)-look_back-1):
                xset = []
                for j in range(dataset.shape[1]):
                        a = dataset[i:(i+look_back), j]
                        xset.append(a)
                dataX.append(xset)
                dataY.append(dataset[i + look_back,0])
        return numpy.array(dataX), numpy.array(dataY)
X=[2.0298948], Predicted=[[0.5]]
X=[2.2400405], Predicted=[[1.]]
не количество эпох, не количество блоков не меняет ситуацию. Даже если сделать через MLP.
Почему так происходит?
Выслушаю любые мнения(но только по теме).

Отредактировано Antonio0608 (Июль 25, 2020 14:20:26)

Офлайн

#9 Июль 26, 2020 22:19:54

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1352
Репутация: +  118  -
Профиль   Отправить e-mail  

Анализ, предсказание следующего шага последовательности.

вот код моооощщщщного искусственного интеллекта,он может предсказать следующее число(правда только в правильной последовательности

 sequence = '123456'
def forecasting(sequence):
	try:
		for i in range(len(sequence)):
			if sequence[i] != sequence[-1]:
				if int(sequence[i+1]) == int(sequence[i])+1:
					continue
				else:
					n = int(sequence[-1]) + 1
					print(sequence)
					print(f"что дальше,не понятно,но моооожет быть {n}")
					return False
			else:
				n = int(sequence[-1])+1
				print(sequence)
				print(f"вероятно,следующее число {n}")
	except:
		print(sequence)
		print("это для меня сложная последовательность")
forecasting(sequence)

P.s код всерьёз не воспринимайте,просто тему поддержать

Отредактировано xam1816 (Июль 26, 2020 22:21:19)

Офлайн

#10 Июль 27, 2020 03:46:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9870
Репутация: +  853  -
Профиль   Отправить e-mail  

Анализ, предсказание следующего шага последовательности.

Antonio0608
Где ошибка в моем коде?
Где-то в обучении нейросети. Надо нейросеть сначала построить. Потом надо дать нейросети много пар вида (входные данные, правильный результат) , по которым она научится правильно определять. Потом обученной нейросети даются входные данные, похожие на входные данные при обучении, и она выдаёт результат для них.

Попробуй всё стереть и начать заново. К тому же исключить Excel, так как Excel вообще здесь никаким боком. И начни с чего-нибудь очень простого, не с чисел Фибоначчи, а с ноль и один.



Отредактировано py.user.next (Июль 27, 2020 03:47:31)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version