Как реализовать решение в Java с ESHyperNEAT?
Я заинтересован в искусственном интеллекте, и 2 дня назад я обнаружил интересную недавнюю разработку в этой области, которая называется ES-HyperNEAT, сначала был NEAT, затем HyperNEAT, а затем ES-HyperNEAT.
Вот несколько ссылок на тему:
http://eplex.cs.ucf.edu/hyperNEATpage/
http://eplex.cs.ucf.edu/ESHyperNEAT/
Итак, я скачал Java-версию AHNI, но нет учебника, я думаю, разработчики считали само собой разумеющимся, что его легко использовать, но я не знаю, как реализовать решение следующей проблемы, не так ли? не кажется очень сложным, но кто-то может показать мне, как начать?
Вход выглядит так:
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,...)?
1 ответ
Файл readme.txt (который вы можете увидеть по адресу https://github.com/OliverColeman/ahni) содержит некоторую информацию о начале ваших собственных экспериментов, в частности, смотрите раздел РАЗРАБОТКА И СОЗДАНИЕ НОВЫХ ЭКСПЕРИМЕНТОВ. В настоящее время в AHNI нет кода, специально предназначенного для прогнозирования временных рядов, поэтому вам придется расширить один из базовых классов фитнес-функций (см. Файл readme). Ваш код должен был бы выполнять то, о чем вы спрашиваете (пункты 2-4), но вы можете создать довольно общий класс предсказания временных рядов, который можно настроить с помощью файла.properties, чтобы указать вещи в пунктах 2-4. Если вы сделаете это, не стесняйтесь вносить его, и мы добавим его в программное обеспечение AHNI на github:).
AHNI предназначен в качестве исследовательской платформы для поддержки моих собственных исследований (и, надеюсь, других на этом пути), а не как "простой в использовании, бросить универсальную проблему машинного обучения X в это" программный пакет (в зависимости от вашего определения "легкий"). использовать"). Я стараюсь поддерживать чистый код, хорошо организованный и хорошо документированный 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 для такого рода проблем.