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输入?
我对机器学习比较陌生,花了很多时间在线寻找我的问题的解决方案,但我找不到任何简单的事情.
有任何想法吗?
这通常通过递归神经网络(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),您需要为您的数据找到正确的设置.