- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在研究一种算法,我得到了一些输入并得到了它们的输出,并给出了 3 个月的输出(给予或接受)我需要一种方法来查找/计算 future 的输出.
现在,给定的这个问题可能与证券交易有关,我们有一定的约束条件和一定的结果,我们需要找到下一个。
我偶然发现了神经网络股市预测,你可以Google它,或者你可以阅读它 here , here和 here .
为了开始制作算法,我无法弄清楚层的结构应该是什么。
给定的约束是:
现在,我的第一个问题是,我需要多少个节点作为输入?
输出只有一个,很好。但正如我所说,我是否应该为输入层取 100 个节点(假定股票价格始终是整数并且总是 btw 1 和 100?)
隐藏层呢?有多少个节点?比如说,如果我也在那里使用 100 个节点,我认为这不会对网络进行太多训练,因为我认为对于每个输入,我们还需要考虑所有以前的输入。
比如说,我们正在计算第 4 个月的第 1 天的输出,我们应该在隐藏层/中间层有 90 个节点(为简单起见,假设每个月为 30 天)。现在有两种情况
无论如何,现在当我们计算第 4 个月第 2 天的输出时,我们不仅需要那 90 个输入,还需要最后一个结果(而不是预测,如果相同的话!),所以我们现在在中间/隐藏层中有 91 个节点。
依此类推,它会不断增加每天的节点数量,AFAICT。
所以,我的另一个问题是,如果动态变化,我该如何定义/设置隐藏层/中间层中的节点数。
我的最后一个问题是,是否还有我不知道的其他特定算法(对于这种事情/东西)?我应该使用它而不是摆弄这些神经网络的东西?
最后,有什么我可能遗漏的东西可能会导致我(而不是我正在制作的算法)预测输出,我的意思是任何警告,或者任何可能导致我可能遗漏的错误的东西?
最佳答案
您的问题的答案有很多。事实上,您的问题解决了一般时间序列预测的问题,以及神经网络在该任务中的应用。我在这里只写了几个最重要的关键,但在阅读本文之后,您可能应该深入了解 Google 的查询结果 time series prediction neural network
。有很多作品详细介绍了原理。也存在各种软件实现(带有源代码)( here is just one of examples with codes in c++ )。
1) 我必须说,问题 99% 与数据预处理和选择正确的输入/输出因素有关,只有 1% 与使用的具体仪器有关,无论是神经网络还是其他。附带说明一下,神经网络可以在内部实现大多数其他数据分析方法。例如,您可以使用神经网络进行主成分分析 (PCA),它与另一个答案中提到的 SVD 密切相关。
2) 输入/输出值严格符合特定区域的情况非常罕见。现实生活中的数据可以认为是绝对值无界的(即使它的变化看起来产生了 channel ,也可以在一瞬间分解),但神经网络只能在稳定的条件下运行。这就是为什么数据通常首先转换为增量(通过计算第 i 个点和 i-1 之间的增量,或者从它们的比率中获取 log
)。我建议你还是用你的数据来做,尽管你声明它在 [0, 100] 区域内。如果不这样做,神经网络很可能会退化为所谓的朴素预测器,它会生成每个下一个值都等于前一个值的预测。
然后数据被归一化为 [0, 1] 或 [-1, +1]。第二种适用于时间序列预测的情况,其中 +1 表示向上移动,-1 - 向下移动。对网络中的神经元使用 hypertanh 激活函数。
3) 您应该向 NN 提供从日期的滑动窗口
获得的输入数据。例如,如果你有一年的数据,每个点都是一天,你应该选择窗口的大小——比如一个月——然后一天一天地滑动它,从过去到 future 。恰好位于窗口右边界的那一天是 NN 的目标输出。这是一种非常简单的方法(还有更复杂的方法),我提到它只是因为你问如何处理连续到达的数据。答案是——您不需要每天更改/扩大您的神经网络。只需使用具有固定窗口大小的常量结构并“忘记”(不向神经网络提供)最旧的点。重要的是不要将所有数据都视为单一输入,而是将其分成许多小向量并在其上训练神经网络,这样网络就可以概括数据并找到规律性。
4) 滑动窗口的大小就是你的神经网络输入大小。输出大小为 1。您应该调整隐藏层大小以获得更好的性能。从输入和输出之间的某个值开始,例如 sqrt(in*out)。
根据最新研究,Recurrent Neural Networks似乎更适合时间序列预测任务。
关于algorithm - 神经网络和算法,预测过去的 future 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13132493/
滑动窗口限流 滑动窗口限流是一种常用的限流算法,通过维护一个固定大小的窗口,在单位时间内允许通过的请求次数不超过设定的阈值。具体来说,滑动窗口限流算法通常包括以下几个步骤: 初始化:设置窗口
表达式求值:一个只有+,-,*,/的表达式,没有括号 一种神奇的做法:使用数组存储数字和运算符,先把优先级别高的乘法和除法计算出来,再计算加法和减法 int GetVal(string s){
【算法】前缀和 题目 先来看一道题目:(前缀和模板题) 已知一个数组A[],现在想要求出其中一些数字的和。 输入格式: 先是整数N,M,表示一共有N个数字,有M组询问 接下来有N个数,表示A[1]..
1.前序遍历 根-左-右的顺序遍历,可以使用递归 void preOrder(Node *u){ if(u==NULL)return; printf("%d ",u->val);
先看题目 物品不能分隔,必须全部取走或者留下,因此称为01背包 (只有不取和取两种状态) 看第一个样例 我们需要把4个物品装入一个容量为10的背包 我们可以简化问题,从小到大入手分析 weightva
我最近在一次采访中遇到了这个问题: 给出以下矩阵: [[ R R R R R R], [ R B B B R R], [ B R R R B B], [ R B R R R R]] 找出是否有任
我正在尝试通过 C++ 算法从我的 outlook 帐户发送一封电子邮件,该帐户已经打开并记录,但真的不知道从哪里开始(对于 outlook-c++ 集成),谷歌也没有帮我这么多。任何提示将不胜感激。
我发现自己像这样编写了一个手工制作的 while 循环: std::list foo; // In my case, map, but list is simpler auto currentPoin
我有用于检测正方形的 opencv 代码。现在我想在检测正方形后,代码运行另一个命令。 代码如下: #include "cv.h" #include "cxcore.h" #include "high
我正在尝试模拟一个 matlab 函数“imfill”来填充二进制图像(1 和 0 的二维矩阵)。 我想在矩阵中指定一个起点,并像 imfill 的 4 连接版本那样进行洪水填充。 这是否已经存在于
我正在阅读 Robert Sedgewick 的《C++ 算法》。 Basic recurrences section it was mentioned as 这种循环出现在循环输入以消除一个项目的递
我正在思考如何在我的日历中生成代表任务的数据结构(仅供我个人使用)。我有来自 DBMS 的按日期排序的任务记录,如下所示: 买牛奶(18.1.2013) 任务日期 (2013-01-15) 任务标签(
输入一个未排序的整数数组A[1..n]只有 O(d) :(d int) 计算每个元素在单次迭代中出现在列表中的次数。 map 是balanced Binary Search Tree基于确保 O(nl
我遇到了一个问题,但我仍然不知道如何解决。我想出了如何用蛮力的方式来做到这一点,但是当有成千上万的元素时它就不起作用了。 Problem: Say you are given the followin
我有一个列表列表。 L1= [[...][...][.......].......]如果我在展平列表后获取所有元素并从中提取唯一值,那么我会得到一个列表 L2。我有另一个列表 L3,它是 L2 的某个
我们得到二维矩阵数组(假设长度为 i 和宽度为 j)和整数 k我们必须找到包含这个或更大总和的最小矩形的大小F.e k=7 4 1 1 1 1 1 4 4 Anwser是2,因为4+4=8 >= 7,
我实行 3 类倒制,每周换类。顺序为早类 (m)、晚类 (n) 和下午类 (a)。我固定的订单,即它永远不会改变,即使那个星期不工作也是如此。 我创建了一个函数来获取 ISO 周数。当我给它一个日期时
假设我们有一个输入,它是一个元素列表: {a, b, c, d, e, f} 还有不同的集合,可能包含这些元素的任意组合,也可能包含不在输入列表中的其他元素: A:{e,f} B:{d,f,a} C:
我有一个子集算法,可以找到给定集合的所有子集。原始集合的问题在于它是一个不断增长的集合,如果向其中添加元素,我需要再次重新计算它的子集。 有没有一种方法可以优化子集算法,该算法可以从最后一个计算点重新
我有一个包含 100 万个符号及其预期频率的表格。 我想通过为每个符号分配一个唯一(且前缀唯一)的可变长度位串来压缩这些符号的序列,然后将它们连接在一起以表示序列。 我想分配这些位串,以使编码序列的预
我是一名优秀的程序员,十分优秀!