Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras深度学习和财务回报_Python_Keras_Neural Network_Finance_Quantitative Finance - Fatal编程技术网

Python Keras深度学习和财务回报

Python Keras深度学习和财务回报,python,keras,neural-network,finance,quantitative-finance,Python,Keras,Neural Network,Finance,Quantitative Finance,我正在通过Keras图书馆体验Tensorflow,在开始预测不确定性之前,我认为预测某些特定的东西可能是个好主意。因此,我尝试使用每日价格水平数据预测每周收益。我的输入形状如下:(1000,5,2),即1000个矩阵的形式: Stock A Stock B 110 100 95 101 90 100 89 99 100 110 对于A股而言,在日t=0的价格为100,95在t-1和100在t-5。因此,A股的

我正在通过Keras图书馆体验Tensorflow,在开始预测不确定性之前,我认为预测某些特定的东西可能是个好主意。因此,我尝试使用每日价格水平数据预测每周收益。我的输入形状如下:(1000,5,2),即1000个矩阵的形式:

Stock A   Stock B
 110       100
 95        101
 90        100  
 89        99
 100       110
对于
A股
而言,在
日t=0
的价格为
100
95
t-1
100
t-5
。因此,
A股
的周回报率为
110/100=10%
,而
B股
的周回报率为
-10%
。因为我现在只关注股票作为回报的预测,所以这个输入矩阵的y就是标量
0.01
。此外,我想将其作为一个分类问题,从而通过
将一个热编码向量转化为_category
,如果y大于5%,则为1;如果y小于-5%,则为2;如果y介于两者之间,则为0。因此,我对上述矩阵的分类输出为:

0 1 0
为了简化:我想让我的模型学习如何计算回报,也就是说,将输入矩阵中的第一个值除以股票A的输入矩阵的最后一个值,忽略股票B的输入。这将得到y。对于我来说,这只是一个练习任务,在我开始更困难的任务之前,模型应该实现零损失,因为没有不确定性。你打算用什么样的型号?我尝试了以下方法,但它根本不收敛。通过
compute\u sample\u weight('balanced')计算训练和验证权重。

我认为卷积可能对这有好处,因为每个返回都是单独计算的,所以我决定选择一个本地连接层。对于这样一个简单的任务,我需要添加更多的层吗


编辑:将我的输入矩阵转换为返回,模型成功收敛。因此,输入必须正确,但模型无法找到除法函数。有适合这样做的层吗?

测试集的结果是什么?它不会收敛。基本上,它在所有的时代都是这样的:
Epoch 5/1000-5s-loss:12.3980-acc:0.5916-val_loss:11.8097-val_acc:0.5625
这里不确定,但有一些建议。删除平台回调并重新运行以查看它是否导致问题。此外,尝试生成类似于输入的数据,以查看它是否不是输入问题(质量、数量)。如果有很多超参数,请尝试修改。很难知道问题的根源是什么。我只是通过采用百分比变化而不是价格水平来转换输入以匹配输出。这个模型现在运行得很好。因此,一般数据应该是正确的。您认为LocallyConnected2D作为第一层有意义吗?它将独立地为过滤器建模,假设权重是独立的。根据您的输入上下文,您也可以尝试conv2d图层。我会尝试两种方法。你的测试结果是什么?它不会收敛。基本上,它在所有的时代都是这样的:
Epoch 5/1000-5s-loss:12.3980-acc:0.5916-val_loss:11.8097-val_acc:0.5625
这里不确定,但有一些建议。删除平台回调并重新运行以查看它是否导致问题。此外,尝试生成类似于输入的数据,以查看它是否不是输入问题(质量、数量)。如果有很多超参数,请尝试修改。很难知道问题的根源是什么。我只是通过采用百分比变化而不是价格水平来转换输入以匹配输出。这个模型现在运行得很好。因此,一般数据应该是正确的。您认为LocallyConnected2D作为第一层有意义吗?它将独立地为过滤器建模,假设权重是独立的。根据您的输入上下文,您也可以尝试conv2d图层。我想两种都试试。
Earlystop = EarlyStopping(monitor='val_loss', patience=150, mode='min', verbose=1, min_delta=0.0002, restore_best_weights=True) 
checkpoint = ModelCheckpoint('nn', monitor='val_loss', verbose=1, save_best_only=True, mode='min', save_weights_only=False)
Plateau = ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=30, verbose=1)
optimizer = optimizers.Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, amsgrad=True)

input_ = Input(batch_shape=(batch_size, 1, 5, 2)) 

model = LocallyConnected2D(16, kernel_size=(5, 1), padding='valid', data_format="channels_first")(input_)
model = LeakyReLU(alpha=0.01)(model)
model = Dense(128)(model)
model = LeakyReLU(alpha=0.01)(model)
model = Flatten()(model)

x1 = Dense(3, activation='softmax',  name='0')(model)
final_model = Model(inputs=input_, outputs=[x1])
final_model.compile(loss='categorical_crossentropy' , optimizer=optimizer,  metrics=['accuracy'])
history = final_model.fit(X_train, y_train, epochs=1000, batch_size=batch_size, verbose=2, shuffle=False, validation_data=[X_valid, y_valid, valid_weight],  sample_weight=train_weight, callbacks=[Earlystop, checkpoint, Plateau])