我对人工智能很感兴趣,两天前我发现了一个在这个领域的最新发展,它被称为ES-HyperNEAT。首先是NEAT,然后是HyperNEAT,最后是ES-HyperNEAT。
以下是关于这个话题的一些链接:
http://eplex.cs.ucf.edu/hyperNEATpage/
http://eplex.cs.ucf.edu/ESHyperNEAT/
所以我下载了AHNI的Java版本,但没有找到教程,我猜开发者认为它很容易使用,但对我来说,我不知道如何为下面的问题实现一个解决方案,看起来并不难,但有人能告诉我如何开始吗?
输入看起来像这样:
Date , A , B , C , D2013-07-26,18.94,19.06,18.50,18.632013-07-25,18.85,19.26,18.55,19.042013-07-24,19.32,19.40,18.47,18.992013-07-23,20.15,20.30,19.16,19.22 <-- Predict it ? [ Output ]2013-07-22,20.09,20.23,19.80,20.03 <-- Start Date2013-07-19,20.08,20.48,19.76,20.022013-07-18,19.88,20.68,19.64,20.122013-07-17,19.98,20.07,19.69,19.832013-07-16,20.38,20.49,19.51,19.92 ......2013-07-02,18.19,18.20,17.32,17.692013-07-01,18.38,18.96,17.95,18.15 <-- End Date
程序应该从开始日期读取上述数据,追溯n天到结束日期,在这些数据上进行训练,正确的输出总是下一天的D值,我想知道这如何用ES-HyperNEAT实现?
具体来说:
[1] 启动过程需要调用哪些类?[2] 如何告诉它从输入文件中收集哪些字段的数据,在这种情况下可以忽略日期字段,并从A、B、C、D中收集数据(未归一化为0到1)?[3] 如何告诉它正确的结果是下一天的D值?[4] 如何指定程序应从开始日期的第x行开始,并通过结束日期的第y行获取数据?
是否有类似于:myProgram.start(FilePath,Delimiliter,Filed2,Field3,..,Line_X,Line_Y,…) 的东西?
回答:
readme.txt(你可以在https://github.com/OliverColeman/ahni看到)包含了一些关于开始你自己的实验的信息,特别是查看“开发和创建新实验”部分。目前在AHNI中没有专门用于进行时间序列预测的代码,所以你需要扩展一个基本的适应度函数类(参见readme)。你的代码需要做你所问的事情(点2-4),但你可以创建一个相当通用的时间序列预测类,通过.properties文件配置来指定点2-4中的内容。如果你这样做了,欢迎贡献代码,我们会将其添加到github上的AHNI软件中 :).
AHNI旨在作为一个研究平台来支持我自己的研究(希望也能帮助其他人),而不是一个“易于使用,将通用机器学习问题X扔给它”的软件包(取决于你对“易于使用”的定义)。我尽量保持代码整洁、有条理,API文档完善,以便其他人可以使用它,但为许多可能的用例创建一个完整的教程(和功能)超出了项目的范围(当然,我很乐意包含其他人编写的教程)。
在进一步进行之前,我建议考虑以下内容:
当我在谷歌上搜索之前关于使用HyperNEAT进行时间序列预测的研究时,我偶然发现了几年前我问的一个与你类似的问题,我完全忘记了这个问题(看到我的名字附在问题上我很惊讶!:)) http://tech.groups.yahoo.com/group/neat/message/5470 这个问题的回答对这个问题有很好的思考。此外:
(ES-)HyperNEAT旨在利用输入或输出的几何规律性(模式、相关性)(参见http://eplex.cs.ucf.edu/papers/gauci_nc10.pdf),所以一个值得探索的问题是数据是否包含可以几何表示的规律性(在我的问题中,我建议将时间序列的某个窗口绘制在二维平面上,网络的二维输入层“看到”,类似于http://eplex.cs.ucf.edu/papers/verbancsics_gecco10.pdf中使用的做法)。然而,听起来使用循环网络的NEAT可能对于这种问题同样好,甚至更好。