Нелинейное уравнение Питона с оценкой множителей Лагранжа - PullRequest
3 голосов
/ 19 октября 2011

Я боролся с этим несколько дней ... но безрезультатно. Я не очень хорош в сложной математике, не говоря уже о таком уровне сложности.

Я пытался реализовать приложение максимальной энтропии для лотереи в python для своего дипломного задания, хотя в центре внимания проекта было внедрение ряда технических приемов интеллектуального анализа данных (деревья решений, Apriori, kmeans), которые уже были закончены просто не мог упустить возможность сделать что-то более продвинутое .... но я думаю, что это слишком продвинуто для меня.

Итак, мой вопрос, как я могу решить нелинейное уравнение (8) из следующей статьи

ссылка1: http://eprints.ecs.soton.ac.uk/901/01/paper05.pdf

метод основан на следующей статье

reference2: http://www.stanford.edu/~cover/papers/paper91.pdf

любая помощь (теоретическая или иная) будет высоко оценена. спасибо

1 Ответ

4 голосов
/ 20 октября 2011

Вам нужно использовать уравнения с 7 по 9 в комбинации. Единственными вещами, которые неизвестны в уравнениях, являются множители Лагранжа, лямбды. Все остальное зависит от доступных эмпирических данных, и, таким образом, это просто цифры.

Учитывая набор значений для лямбд, вы можете вычислить G (j, r) и якобиан J (j, i, r, s). В свою очередь, если вы знаете невязки и якобиан, вы можете использовать метод Ньютона, приведенный в уравнении 9, чтобы найти корни системы уравнений, т. Е. Такие значения лямбды, что G (j, r) = 0.

Таким образом, вы используете начальное предположение о значениях лямбд для вычисления других терминов, а затем используете эти термины для обновления вашего предположения. Нет никакой концептуальной проблемы в работе с уравнениями 7 и 8 - просто включите значения - но они складывают много чисел, поэтому некоторая осторожность оправдана.

Уравнение 9 немного сложнее, поскольку написано не очень четко. Поскольку в статье описывается система уравнений, вы обычно ожидаете решения линейного уравнения:

J * d_lambda = -G

где d_lambda - вектор изменений в предположении, G - вектор значений для функции, а J - матрица якобиановых значений. Обозначения в статье довольно запутанные, скрывая то, что должно быть простым выражением. Вы можете получить его в более понятной форме, введя единый индекс a для замены пары индексов i и s ; авторы упоминают именно это изменение в обсуждении метода, давая формулу для расчета комбинированного индекса во втором абзаце на странице 4.

В целом процедура становится (с использованием единого индекса):

  1. Выберите несколько лямбд, чтобы они действовали как ваше первоначальное предположение. Может быть, нули или случайные числа.
  2. Оценить G (a) и J (a, b).
  3. Решите систему линейных уравнений, чтобы получить обновления для вашего предположения.
  4. Если обновления невелики по сравнению с вашими предположениями, остановитесь. В противном случае определите новое предположение и вернитесь к шагу 2.

Это выглядит вполне осуществимым, используя Numpy. В документе говорилось об использовании стратегии параллельных вычислений, но это было более десяти лет назад; сегодня это кажется гораздо меньшей проблемой.

...