机器学习 - 如何使用过去的20行作为每个Y值的X输入

xio*_*ion 5 python finance machine-learning pandas keras

我这里有一个非常简单的机器学习代码:

# load dataset
dataframe = pandas.read_csv("USDJPY,5.csv", header=None)
dataset = dataframe.values
X = dataset[:,0:59]
Y = dataset[:,59]
#fit Dense Keras model
model.fit(X, Y, validation_data=(x,y_test), epochs=150, batch_size=10)
Run Code Online (Sandbox Code Playgroud)

我的X值是59个特征,第60列是我的Y值,一个简单的1或0分类标签.

考虑到我正在使用财务数据,我想回顾过去的20个X值以预测Y值.

那么我怎么能让我的算法使用过去的20行作为每个Y值的X输入?

我对机器学习比较陌生,花了很多时间在线寻找我的问题的解决方案,但我找不到任何简单的事情.

有任何想法吗?

DJK*_*DJK 6

这通常通过递归神经网络(RNN)来完成,当接收到下一个输入时,该递归神经网络保留先前输入的一些存储器.这是对所发生的事情的一个非常简洁的解释,但是互联网上有很多来源可以更好地理解它们的工作原理.

让我们在一个简单的例子中打破这个.假设您有5个样本和5个数据特征,并且您希望两个数据错开2行而不是20个.这是您的数据(假设1个库存,最旧的价格值是第一个).我们可以将每一行视为一周中的某一天

ar = np.random.randint(10,100,(5,5))

[[43, 79, 67, 20, 13],    #<---Monday---
 [80, 86, 78, 76, 71],    #<---Tuesday---
 [35, 23, 62, 31, 59],    #<---Wednesday---
 [67, 53, 92, 80, 15],    #<---Thursday---
 [60, 20, 10, 45, 47]]    #<---Firday---
Run Code Online (Sandbox Code Playgroud)

要使用LSTMin keras,您的数据需要是3-D,而不是现在的2-D结构,并且每个diminsion的符号都是(samples,timesteps,features).目前你只有(samples,features)这样你需要增加数据.

a2 = np.concatenate([ar[x:x+2,:] for x in range(ar.shape[0]-1)])
a2 = a2.reshape(4,2,5)

[[[43, 79, 67, 20, 13],    #See Monday First
  [80, 86, 78, 76, 71]],   #See Tuesday second ---> Predict Value originally set for Tuesday
 [[80, 86, 78, 76, 71],    #See Tuesday First
  [35, 23, 62, 31, 59]],   #See Wednesday Second ---> Predict Value originally set for Wednesday
 [[35, 23, 62, 31, 59],    #See Wednesday Value First
  [67, 53, 92, 80, 15]],   #See Thursday Values Second ---> Predict value originally set for Thursday
 [[67, 53, 92, 80, 15],    #And so on
  [60, 20, 10, 45, 47]]])
Run Code Online (Sandbox Code Playgroud)

注意数据是如何交错和三维的.现在只需建立一个LSTM网络.Y仍然是2-D,因为这是多对一结构,但是您需要剪切第一个值.

model = Sequential()
model.add(LSTM(hidden_dims,input_shape=(a2.shape[1],a2.shape[2]))
model.add(Dense(1))
Run Code Online (Sandbox Code Playgroud)

这只是一个让你感动的简短例子.有许多不同的设置可以使用(包括不使用RNN),您需要为您的数据找到正确的设置.