Усиление обучения с neo4j: сделать 2 копии графа против хранить 2 копии всех значений на 1 графе - PullRequest
3 голосов
/ 12 января 2012

Я планирую запустить алгоритм машинного обучения, который изучает значения узлов и веса ребер.Алгоритм очень похож на алгоритм итерации значения здесь .Каждый узел представляет местоположение, а каждое ребро - это путь к новому местоположению.Каждый узел и ребро поддерживают значение, представляющее, насколько это желательно.Эти значения обновляются на каждой итерации на основе значений предыдущей итерации.

Я планирую использовать neo4j в качестве бэкэнда.На данный момент будет около 600 000 узлов и 100 000 000 ребер, но больше может быть добавлено позже (график не помещается в памяти).Каков наилучший способ сохранить значения из предыдущей итерации?На ум приходят 2 способа:

  1. клонировать текущую базу данных и использовать 1 копию в качестве копии «текущей итерации» и 1 копию в качестве копии «предыдущей итерации».
  2. Вконец каждой итерации переводит все значения каждого узла и ребра в свойство «предыдущая итерация».

Как люди обычно делают это?Есть ли лучший способ?

Ответы [ 2 ]

3 голосов
/ 12 января 2012

В статье MDP, на которую вы ссылаетесь, дается хороший обзор ценности и итерации политики, но не стоит упоминать асинхронное динамическое программирование.Дело в том, что вам не нужно выполнять полностью изолированные развертки графика, чтобы значения сходились [1];Вы можете обновлять вершины по одной в любом порядке, учитывая, что вы не пренебрегаете ни одной из них.То есть вам вообще не нужно делать копию графа.


[1] Берцекас Д., 1982. Распределенное динамическое программирование. Транзакции IEEE с автоматическим управлением , 27 (3), с.610-616.

3 голосов
/ 12 января 2012

каков размер графика и сколько итераций вы делаете? С меньшими графиками я дублировал бы график в версиях, либо на диске в виде нового графика, либо просто как подграф в той же базе данных.

С большими суммами я думаю, что подход к архивированию собственности лучше.

...