我对AI感兴趣,两天前,我发现了该领域的一个有趣的最新进展,称为ES-HyperNEAT,首先是NEAT,然后是HyperNEAT,然后是ES-HyperNEAT。
以下是该主题的一些链接:
http://eplex.cs.ucf.edu/hyperNEATpage/
http://eplex.cs.ucf.edu/ESHyperNEAT/
因此,我已经下载了AHNI的Java版本,但是没有教程,我想开发人员认为它易于使用,但是对我来说,我不知道如何实现以下问题的解决方案,看起来并不难,但是有人可以教我如何入门吗?
输入看起来像这样:
Date , A , B , C , D
2013-07-26,18.94,19.06,18.50,18.63
2013-07-25,18.85,19.26,18.55,19.04
2013-07-24,19.32,19.40,18.47,18.99
2013-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 Date
2013-07-19,20.08,20.48,19.76,20.02
2013-07-18,19.88,20.68,19.64,20.12
2013-07-17,19.98,20.07,19.69,19.83
2013-07-16,20.38,20.49,19.51,19.92
......
2013-07-02,18.19,18.20,17.32,17.69
2013-07-01,18.38,18.96,17.95,18.15 <-- End Date
程序应从开始日期(倒数n天)开始到结束日期读取上述数据,对这些数据进行训练,正确的输出将始终是第二天的D值,我想知道如何使用ES-HyperNEAT来实现吗?
具体来说:
[1] Which classes to call to start the process ?
[2] How to tell it which fields in the input file to gather data, in this case it can ignore the Date field, and gather data from A,B,C,D [ not normalized to 0,1 ]
[3] How to tell it the correct result is the next day's D value ?
[4] How to specify the program should start from line x at the Start Date, and get data through line y at the End Date ?
是否有类似的东西:myProgram.start(FilePath,Delimiliter,Filed2,Field3,..,Line_X,Line_Y,...)?
最佳答案
readme.txt(您可以在https://github.com/OliverColeman/ahni上找到)包含有关开始进行自己的实验的一些信息,特别是请参阅“开发和创建新实验”部分。当前,AHNI中没有特定于执行时间序列预测的代码,因此您必须扩展基本适应度函数类之一(请参阅自述文件)。您的代码需要完成您要问的事情(第2-4点),但是您可以创建一个相当通用的时间序列预测类,可以通过.properties文件进行配置,以指定第2-4点的事情。如果您这样做,请随时贡献它,我们将其添加到github上的AHNI软件中:)。
AHNI旨在作为一个研究平台来支持我自己的研究(并希望其他研究者也可以),而不是“易于使用,在其中抛出通用机器学习问题X”的软件包(取决于您对“ easy”的定义使用”)。我尝试保持代码整洁,井井有条,并妥善记录API,以便其他人可以使用它,但是为许多可能的用例创建完整的教程(和功能)超出了项目范围(尽管我当然乐意收录其他人撰写的教程)。
在继续之前,我建议考虑以下因素:
在搜寻有关使用HyperNEAT进行时间序列预测的先前研究时,我遇到了一个问题,该问题与几年前我完全忘记的问题相似(我很惊讶看到这个问题附有我的名字!:) )http://tech.groups.yahoo.com/group/neat/message/5470对此问题的答复是深思熟虑的好食物。另外:
(ES-)HyperNEAT旨在利用输入或输出中的几何规则性(模式,相关性)(请参见http://eplex.cs.ucf.edu/papers/gauci_nc10.pdf),因此可能值得探讨的一个问题是数据是否包含可以用几何图形表示的规则性(在我的文章中问题我建议在2D平面上绘制时间序列的某个窗口,网络的2D输入层可以“看到”该窗口,类似于http://eplex.cs.ucf.edu/papers/verbancsics_gecco10.pdf中使用的方法。但是,听起来像NEAT,使用循环网络,对于此类问题,它可能比HyperNEAT更好甚至更好。
关于java - 如何使用ESHyperNEAT在Java中实现解决方案?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18025835/