用Pybrain寻找神经网络的基本例子(交易算法)

时间:2017-02-17 09:38:55

标签: neural-network pybrain quantitative-finance algorithmic-trading

我是Pybrain和神经网络的新手,我在实施一个监督分类的简单例子方面遇到了困难。

我有一个名为 datanew 的dataFrame,其中包含9个不同的数据列(日期,平均值等)和最后一列, Label 只有{0 | 1 | -1}分类标签值。

我想将此datanew用作列车数据,以标记名为 dataUnlabeled 的未标记数据框,其中包含9个不同的数据列及其最后一列{{ 1}}满是0。

Q1:我真的不明白,我必须使用/提供Label到神经网络。

dataUnlabeled

Q2:所以我建立了一个模型吗?

问题3:如何“标记”名为“dataUnlabeled”的未标记数据?

2 个答案:

答案 0 :(得分:1)

TL; DR

A1:将准备好的数据倒入准备不足的机器没有实际好处(参考为什么>>> )功能

A2:是&不,你已经建立了[模型],但 [模型]足以满足上述任务。

A3: dataUnlabeled 只有在构建了一个充分构造的ANN模型(参见下面的参考文献(1))之后才会开始发挥作用。恰好在(2)中成功地完成了对预期任务的严格训练。这将是合理的进入(3)。

让我们首先揭开神经网络的神秘面纱,好吗?

如果预计人工神经网络引擎适合您的交易,那么在填充大量数据并祈祷解码结果之前,请先了解它的功能。

永远不要过高估计模型。了解模型功能(以及更好的限制模型的功能)是第一个最好的在实施之前或者只是重新使用模型之前可能会做的事情(并试图依赖于缺少的第5个元素 - 奇怪?不是这样,很多时候看到"从业者"使用线性模型来&## 34;学习"二次问题 - 没有人会成功地用直线光束绘制光滑的抛物线曲线,只是线性标尺,对不起,从不...使用错误的模型产生但错误的结果...独立于任何数量的数据。)

神经网络在功能上并不比无源基础设施更复杂,无源基础设施包括几个与导线完全互连的串行层,在每层之间的每根导线上都有一个可变电阻 - 在引脚上焊接1:1在中间窗口 - (是的,像烙铁一样肮脏的肮脏,很多,实际上很多电线,可能会得到)。

enter image description here

当然,我决定简化这一点,跳过非线性传输单元(在这里具有特定的但不是主要的操作特性{sigmoid | tanh | ...}),但这些只会分散注意力一个&# 39;关注最重要的目标 - 理解两个键和不同概念

- (1) ANN-passive infrastructure (电线+电阻)

- (2) ANN主动调整过程 - 要完成的工作 - 之前(1)变得对(3)有用 - 手动调整旋钮,调整每个可变电阻...(哎哟!)......到达最佳可达状态(具有最小的惩罚误差总量,在ANN输出上测量)。

因此,设计步骤(1)称为ANN设计,结果又称 NN-ARCHITECTURE
巨大的,实际上是IMMENSE的努力是(2) - 调整,又称 NN-TRAINING ,最终产生一个这样的准静态电阻器设置,在输出上提供更好的结果(对所有人进行检查)受监督的训练样例)比迄今为止所试验的任何其他机械设置都要多。我故意避免提及策略,如何触摸可变电阻器的队列以及“更好”的指标,而不是最好的"评估的最佳状态。输出,因为在这个时刻,这只会让你受到更大的伤害,而不是你需要手动触摸和调整每个可变电阻旋钮的非常实用的想象力,在循环中多次和多次,错误过程继续,有时提供更好的结果(一个更符合您的监督数据标签),有时非常相反。 C' est La Vie

听起来有点粗野吗?哦,是的,先生,确实是......

是的,即使是使用近5 GHz芯片功率的计算机化版本,也可能花费数天时间来处理相对微不足道的ANN,以解决(2)某种可接受的状态(适用于算法交易领域比任何学术和玩具问题都要难得多,所以手动方法确实超出了实际应用的范围,但很重要,因为这在机械上是精确的什么(计算机化的) ANN培训一样。

[ToDo](1)设计摘要:

  • 您计划构建分类器 - 您可以选择拥有一个神经元OUTPUT-LAYER并强制网络学习,如何区分希望的输出变为三态输出 { -1 | 0 | 1 } ,或者可以选择让三个神经元输出层 [ A, B, C ] 并选择具有最高输出值的那个
  • 您计划拥有一个或多个隐藏层,这将有助于[模型]获得灵活性,以非常非线性的方式响应各种INPUT,主要是能够产生适当的OUTPUT(s)值。因此,NN- 深度 H以及每个 width[h] h = { 1, .., H }都是您的下一组设计选择。 这就是魔法增长的地方。使用单个隐藏层,翻译成人类语言意味着 - 期望结果只是输入的线性组合(嗯,略微非线性元素的线性组合&#39转换后的投入,坦率地说,这似乎是建立交易策略的一个非常不受支持的期望。
  • 您的受监管(已知和手动预先标记的)输入数据示例包含9-INPUT - "状态" -values
    [ x1_Date, x2_Mean, x3_, x4_, x5_, x6_, x7_, x8_, x9_ ]
    对于每个这样的例子,还有一个已知的(我们去监督的)值,我们希望得到这个Classifier例子的输出 - " Supervised_LABEL(s) " - 值
    [ y_LABEL == { -1 | 0 | +1 } ]
    [ y_LABEL_A == { 0 | 1 }, y_LABEL_B == { 0 | 1 }, y_LABEL_C == { 0 | 1 } ]; .sum() == 1
    所以bingo ,您还有一项任务是准备您的数据以及#34;匹配" NN-ARCHITECTURE - 将y_LABEL - s转换为[ A, B, C ] - s,使用 ._convertToOneOfMany() 方法或其他方式。

[ToDo](2)培训摘要:

到目前为止一切顺利,鉴于你的(1)NN-INFRASTRUCTURE准备就绪,这里的骑行开始变得更加刺激:

  • 应该将可用数据集分成两部分。你的选择是培训[模型](这里)的75%和测试的25%(后来)[模型] - 实际上 - (2)实际上对看不见的数据有效 - 审查一个基本属性,即普遍能力。很好,这是正确的方向,但我们还需要一个,也是样本外,子集,主要能够比较不同的复合集,包括[[模型] - 从 - (1)+ [模型] -tuning-parameters-from-(2)]。如果没有单独的集合,在(1)+(2)中都看不见,那么很难比较不同的[(1)+(2)]成分在数量上是公平的。联合国偏置。因此,可用的监督学习(具有已知和正确的标签)数据集的 SIZE MATTERS (很多)。
  • 接下来,培训策略(不是移动旋钮的机械步骤,而是其背后的原则/理念 - 如何决定/计算哪一个以及应该增加或减少多少每个特定的电阻器,以便改善一点(不破坏)预期的行为)包括一些额外的因素,与欲望,如何"形状" NN - 如何计算输出错误的罚分,添加多少(如果有的话)"叠加"从正规化因子(基于L1,L2的等)中进行惩罚,以便形成"形成" INPUT上的网络响应函数(ANN行为)。也许,大多数情况可能隐藏在NN框架的选择之下,但它起着重要的作用,因为时间就是金钱,而糟糕的战略可能会收敛缓慢或者根本不需要收敛 - 所有这一切都是巨大的(2)中被宠坏时间的成本。

[ToDo](3)使用从[(1)+(2)]中选择的最佳候选人:

甜蜜的部分来到这里。

鉴于我们已经彻底完成了(1)+(2)中的任务,现在我们可以部署一个候选者,这对于概括的能力做得最好[在样本外的例子的最后部分验证了] ,在(1)+(2)]中都没有看到。

这意味着,这样的人工神经网络将根据您在ANN的INPUT-LAYER神经元上发送的未标记示例提供估算值。

  

(a)鉴于你的建模工作是公平和彻底的,并且(b)鉴于你的未标记的例子仍然属于系统状态,那与训练的状态是一致的/收集标记数据
然后
  您可以相信准备好的ANN机制,因为ANN提供的OUTPUT-LAYER值反映了它经过培训的经验和最佳努力。并提供有意义的预测(与培训奖励行为兼容)。

答案 1 :(得分:0)

您需要致电activateOnDataset并传递 dataUnlabeled 数据。

这是tutorial: http://pybrain.org/docs/tutorial/fnn.html