如果我想预测一个数字序列中的下一个元素,我需要将什么作为第二个参数传递给Keras的fit方法?

zqdjd7g9  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(172)

我正在尝试编写一个简单的例子来理解LSTM是如何工作的。我想用一个简单的整数序列1,2,3,4,5,6,7,8,9,10来预测下一个数字。我有一个代码,但我不知道fit方法的第二个参数是什么。

import pandas as pd
from sklearn.preprocessing import MinMaxScaler
import numpy as np
from keras.models import Sequential
from keras.layers import LSTM

df = pd.DataFrame(columns = ['Serie'])
for i in range(0, 10):
    df.loc[i, 'Serie'] = i
    
sc = MinMaxScaler(feature_range = (0, 1))
train_set = sc.fit_transform(df.iloc[:, [True]])

xTrain = []

for i in range(0, len(train_set) - 3):
    xTrain.append(train_set[i:i + 3, 0])

xTrain = np.array(xTrain)
xTrain = np.reshape(xTrain, (xTrain.shape[0], xTrain.shape[1], 1))

regresor = Sequential()
regresor.add(LSTM(units = 1, input_shape = (3, 1)))
regresor.compile(optimizer = 'rmsprop', loss = 'mse')
regresor.fit(xTrain, ???, batch_size = 1)

有人能给我一个非常简单的例子吗?给予。

ibrsph3r

ibrsph3r1#

您需要将问题设置为受监督的问题。每个样本都包含自变量x和因变量y。根据您的问题,x包含3个时间步和1个特征的样本。首先执行必要的导入:

import pandas as pd
from sklearn.preprocessing import MinMaxScaler
import numpy as np
import tensorflow as tf

让我们定义一些常量:

points = 30 # number of data points to generate
timesteps = 3 # number of time steps per sample as LSTM layers need input shape (samples, time steps, features)
features = 1 # number of features per time step as LSTM layers need input shape (samples, time steps, features)

一个序列生成器从0…三十:

x = np.arange(points + 1) # array([ 0,  1, ..., 29, 30])

这里我们开始将问题设置为有监督的问题,x作为一个数字序列,y作为下一个数字序列:

y = x[1:] # [ 1,  2, ..., 29, 30 ]
x = x[:30] # [ 0,  1, ..., 28, 29 ]

xy放在一起进行扩展:

dataset = np.hstack((x.reshape((points, 1)),y.reshape((points, 1))))
scaler = MinMaxScaler((0, 1))
scaled = scaler.fit_transform(dataset)

让我们定义模型的输入和输出:

x_train = scaled[:,0] # first column
x_train = x_train.reshape((points // timesteps, timesteps, features)) # as i stated before LSTM layers need input shape (samples, time steps, features)

y_train = scaled[:,1] # second column
y_train = y_train[2::3] # start at the third element in steps of 3, for a total of 10

模型定义和编译。我决定让模型架构更健壮一点,以获得“更好”的性能(参见下面的结果):

regresor = tf.keras.models.Sequential()
regresor.add(tf.keras.layers.LSTM(units = 4, return_sequences = True))
regresor.add(tf.keras.layers.LSTM(units = 2))
regresor.add(tf.keras.layers.Dense(units = 1))
regresor.compile(optimizer = 'rmsprop', loss = 'mse')

训练模型:regresor.fit(x_train,y_train,batch_size = 2,epochs = 500,verbose = 1)
一些预测:y_hats = regresor.predict(x_train)
结果;

real y      predicted y
    0.068966    0.086510
    0.172414    0.162209
    0.275862    0.252749
    0.379310    0.356117
    0.482759    0.467885
    0.586207    0.582081
    0.689655    0.692756
    0.793103    0.795362
    0.896552    0.887317
    1.000000    0.967796

正如您所看到的,预测值非常接近真实的值。
结果图:

请注意,为了简单起见,我对训练数据集进行了预测,测试应该在测试数据上进行。为此,您将不得不生成更多的点,并相应地分割它们(70%的训练,30%的测试)。此外,您可以通过调用缩放器的inverse_transform方法来获取原始范围中的值。

rvpgvaaj

rvpgvaaj2#

我会给你给予一些线索,你可以调整你的程序在星期五的结果是11,30,45,52,56和MB是20。怎么算20跟

08
09
06
03
  1. 07上述矩阵的上部01+09 * 下部02等于20 MB 20的组合是(10,02)(01,9)另一种组合(04,05)您选择逻辑,相关,有效的组合,您应用上述矩阵,然后您可以预测正确的获胜预测

相关问题