максимальная вероятность fminsearch - PullRequest
0 голосов
/ 24 февраля 2012

Я использовал Matlab-fminsearch для негативной модели максимального правдоподобия для биномиальной распределенной функции. Я не получаю никаких сообщений об ошибках, но параметр, который я хочу оценить, всегда принимает начальное значение. Видимо, здесь есть ошибка. Я знаю, что задаю совершенно общий вопрос. Но возможно ли, что кто-то совершил такую ​​же ошибку и знает, как с ней справиться? Большое спасибо,

@ щепки, большое спасибо. Шаг за шагом я пытался сделать то, что вы мне посоветовали. Прежде всего, я на самом деле максимизировал (-log (вероятность)), и это не проблема. Я думаю, что обнаружил проблему, но у меня все еще есть некоторые вопросы, если я не беспокою вас. У меня есть модель (param) для максимизации в paramstart = p1. Эта модель построена для (-log (правдоподобие (F))), а мой F - векторизованная функция, такая как F (t, Z, X, T, param, m2, m3, k, l). У меня есть такие данные, как (tdata, kdata, ldata), X, T являются сетками, а Z является функцией этой сетки, и (m1, m2, m3) задаются параметры. Когда я хочу увидеть значение F (tdata, Z, X, T, m1, m2, m3, kdata, ldata), я получаю хороший вывод. Но я думаю, что fminsearch принимает, что F (tdata, Z, X, T, p, m2, m3, kdata, ldata) как константа, и поэтому у меня всегда есть в качестве оценочного параметра начальное значение. Я буду рад, если вы посоветуете что-нибудь изменить.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

У вас есть несколько вариантов, которые вы можете попробовать настроить. Я бы начал с алгоритма.

Когда значение функции практически не изменяется вокруг вашей начальной точки, это также проблематично. Возможно, переключение на логарифмическую вероятность помогает.

Я всегда использую fminunc или fmincon. Они также позволяют указывать гессенские (обычно лучше, чем «оценочные») или «типичные значения», чтобы алгоритм не проводил время в неосуществимых регионах.

1 голос
/ 24 февраля 2012

Практически всегда верно, что вы НИКОГДА не должны максимизировать функцию правдоподобия, но ВСЕГДА максимизируйте журнал этой функции. В противном случае проблемы с плавающей точкой почти всегда будут искажать проблему. То, что ваша оптимизация запускается и останавливается в одной и той же точке, является хорошим индикатором, это проблема.

Возможно, вам придется копать немного глубже, чем указано выше, но даже в этом случае следующий тест - это тест, который я рекомендую всем пользователям инструментов оптимизации делать для каждой из своих проблем, ДО того, как они выбросят функцию в оптимизатор. , Оцените свою цель по нескольким точкам в окрестностях. Дает ли он существенно разные значения? Если нет, то посмотрите, почему нет. Вы создаете негладкую цель для оптимизации или нулевую цель? Т.е. от нуля до поставленных допусков?

Если он дает разные значения, но все еще не сходится, убедитесь, что вы знаете, как правильно вызвать оптимизатор. Да, верно, как никто никогда не делал эту ошибку раньше. На самом деле это очень распространенная причина сбоя оптимизаторов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...