Вопрос выше говорит обо всем. По сути, мой вопрос касается общей функции подбора (может быть произвольно сложной), которая будет нелинейной по параметрам, которые я пытаюсь оценить. Как выбрать начальные значения для инициализации подбора? Я пытаюсь сделать нелинейные наименьшие квадраты. Есть ли стратегия или метод? Это изучалось? Любые ссылки? Что-нибудь кроме специальных предположений? В частности, сейчас одна из подходящих форм, с которыми я работаю, - это гауссовская плюс линейная форма с пятью параметрами, которые я пытаюсь оценить, например:
где (данные абсциссы) и y = log 10 (данные ординат), означающие, что в пространстве log-log мои данные выглядят как прямая линия плюс выступ, который я аппроксимирую гауссианом. У меня нет теории, нет ничего, что могло бы помочь мне в инициализации нелинейного подбора, кроме, возможно, построения графиков и глазного яблока, например, наклона линии и того, каков центр / ширина выступа. Но у меня есть более сотни таких подходов, вместо того чтобы строить графики и догадки, я бы предпочел какой-то подход, который можно автоматизировать.
Я не могу найти никаких ссылок, в библиотеке или в Интернете. Единственное, о чем я могу думать, это просто случайным образом выбрать начальные значения. MATLAB предлагает выбирать значения случайным образом из [0,1], равномерно распределенные. Итак, с каждым набором данных я запускаю произвольно инициализированное совпадение тысячу раз, а затем выбираю тот, у которого наибольшее значение ? Любые другие (лучшие) идеи?
Приложение № 1
Во-первых, вот несколько визуальных представлений наборов данных, чтобы показать вам, ребята, о каких данных я говорю. Я публикую оба данных в их первоначальном виде без какого-либо преобразования, а затем их визуальное представление в пространстве журналов регистрации, поскольку они разъясняют некоторые функции данных, искажая другие. Я публикую пример как хороших, так и плохих данных.
Каждая из шести панелей на каждом рисунке показывает четыре набора данных, нанесенных вместе красным, зеленым, синим и голубым, и каждый набор данных имеет ровно 20 точек данных. Я пытаюсь установить для каждого из них прямую линию и гауссову из-за неровностей, наблюдаемых в данных.
Первая цифра - некоторые из хороших данных. Вторая фигура - это лог-график тех же хороших данных, что и на рис. Третья цифра - некоторые из плохих данных. Четвертая фигура представляет собой логарифмическую диаграмму фигуры три. Данных намного больше, это всего лишь два подмножества. Большая часть данных (около 3/4) является хорошей, аналогичной хорошим данным, которые я показал здесь.
Теперь несколько комментариев, пожалуйста, потерпите меня, так как это может занять много времени, но я думаю, что все эти детали необходимы. Я постараюсь быть максимально кратким.
Первоначально я ожидал простой степенной закон (имеется в виду прямая линия в пространстве журнала). Когда я нарисовал все в пространстве журнала, я увидел неожиданный удар на частоте около 4,8 мГц. Удар был тщательно исследован и обнаружен в других работах, так что мы не ошиблись. Это есть физически, и другие опубликованные работы тоже упоминают об этом. Тогда я просто добавил гауссовский термин в мою линейную форму. Обратите внимание, что это соответствие должно было быть сделано в пространстве log-log (отсюда и два моих вопроса, включая этот).
Теперь, прочитав ответ Стампи Джо Пита на другой мой вопрос (вообще не связанный с этими данными) и прочитав это и это и ссылки в них (материал Clauset), я понимаю, что я не должен вписываться в log-log Космос. Так что теперь я хочу делать все в предварительно преобразованном пространстве.
Вопрос 1: Глядя на хорошие данные, я все еще думаю, что линейный плюс гауссиан в предварительно преобразованном пространстве - все еще хорошая форма. Я хотел бы услышать от других, у кого больше данных, что они думают. Гауссово + линейно разумно? Должен ли я сделать только гауссовский? Или совсем другая форма?
Вопросы 2: Каким бы ни был ответ на вопрос 1, мне все равно понадобится (скорее всего) нелинейное подгонка наименьших квадратов, поэтому мне все еще нужна помощь с инициализацией.
На данных, где мы видим два набора, мы очень сильно предпочитаем фиксировать первый удар на частоте около 4-5 мГц. Поэтому я не хочу добавлять больше гауссовских терминов, и наш гауссовский термин должен быть сосредоточен на первом выступе, который почти всегда является большим ударом. Мы хотим «больше точности» между 0,8 и 5 мГц. Мы не слишком заботимся о высоких частотах, но не хотим полностью их игнорировать. Так может быть какое-то взвешивание? Или B всегда можно инициализировать на частоте около 4,8 МГц?
Вопросы 3: Как вы думаете, ребята, экстраполируя таким образом в этом случае? Есть плюсы / минусы? Любые другие идеи для экстраполяции? Опять же, мы заботимся только о низких частотах, экстраполируя их между 0 и 1 мГц ... иногда очень очень маленькие частоты, близкие к нулю. Я знаю, что этот пост уже упакован. Я задал этот вопрос здесь, потому что ответы могут быть связаны, но если вы, ребята, предпочитаете, я могу отделить этот вопрос и задать другой позже.
Наконец, вот два образца данных по запросу.
0.813010000000000 0.091178000000000 0.012728000000000
1.626000000000000 0.103120000000000 0.019204000000000
2.439000000000000 0.114060000000000 0.063494000000000
3.252000000000000 0.123130000000000 0.071107000000000
4.065000000000000 0.128540000000000 0.073293000000000
4.878000000000000 0.137040000000000 0.074329000000000
5.691100000000000 0.124660000000000 0.071992000000000
6.504099999999999 0.104480000000000 0.071463000000000
7.317100000000000 0.088040000000000 0.070336000000000
8.130099999999999 0.080532000000000 0.036453000000000
8.943100000000001 0.070902000000000 0.024649000000000
9.756100000000000 0.061444000000000 0.024397000000000
10.569000000000001 0.056583000000000 0.025222000000000
11.382000000000000 0.052836000000000 0.024576000000000
12.194999999999999 0.048727000000000 0.026598000000000
13.008000000000001 0.045870000000000 0.029321000000000
13.821000000000000 0.041454000000000 0.067300000000000
14.633999999999999 0.039596000000000 0.081800000000000
15.447000000000001 0.038365000000000 0.076443000000000
16.260000000000002 0.036425000000000 0.075912000000000
Первый столбец - это частоты в мГц, одинаковые в каждом наборе данных. Второй столбец - это хороший набор данных (хорошие данные на рис. 1 и 2, панель 5, красный маркер), а третий столбец - неправильный набор данных (плохие данные на рис. 3 и 4, панель 5, красный маркер).
Надеюсь, что этого достаточно, чтобы стимулировать более просвещенную дискуссию. Спасибо вам всем.
источник
Ответы:
Если бы существовала стратегия, которая была бы хорошей и общей - та, которая всегда работала, - она уже была бы реализована в каждой нелинейной программе наименьших квадратов, и начальные значения не были бы проблемой.
Для многих конкретных проблем или семейства проблем существуют довольно хорошие подходы к начальным ценностям; некоторые пакеты поставляются с хорошими вычислениями начальных значений для конкретных нелинейных моделей или с более общими подходами, которые часто работают, но, возможно, придется помочь с более конкретными функциями или прямым вводом начальных значений.
Изучение пространства необходимо в некоторых ситуациях, но я думаю, что ваша ситуация, вероятно, будет такой, что более конкретные стратегии, вероятно, будут полезны - но для разработки хорошей стратегии в значительной степени требуется много знаний предметной области, которыми мы вряд ли обладаем.
Некоторые примеры данных могут помочь - типичные случаи и сложные, если вы можете.
Редактировать: Вот пример того, как вы можете справиться довольно хорошо, если проблема не слишком шумная:
Вот некоторые данные, которые генерируются из вашей модели (значения популяции: A = 1,9947, B = 10, C = 2,828, D = 0,09, E = 5):
Начальные значения, которые я смог оценить: (As = 1.658, Bs = 10.001, Cs = 3.053, Ds = 0.0881, Es = 5.026)
Подгонка этой стартовой модели выглядит следующим образом:
Шаги были:
В этом случае значения очень подходят для начала нелинейной подгонки.
Я написал это как
R
код, но то же самое можно сделать в MATLAB.Я думаю, что лучше, чем это возможно.
Если данные очень шумные, это не сработает.
Edit2: это код, который я использовал в R, если кому-то интересно:
,
источник
Существует общий подход к подгонке такого рода нелинейных моделей. Он включает в себя повторную параметризацию линейных параметров со значениями зависимой переменной, например, в первом, последнем значении частоты, и хорошей точкой в середине, например, в 6-й точке. затем вы можете сохранить эти параметры фиксированными и найти нелинейный параметр в первой фазе минимизации, а затем минимизировать все 5 параметров.
Мы с Шнутом выяснили это примерно в 1982 году, когда подбирали модели роста для рыб.
http://www.nrcresearchpress.com/doi/abs/10.1139/f80-172
Однако нет необходимости читать эту статью. В связи с тем, что параметры являются линейными, просто необходимо установить и решить линейную систему уравнений 3x3, чтобы использовать устойчивую параметризацию модели.
Для вашего случая с неверными данными, он подходит довольно легко, и (обычные) оценки параметров:
источник
Если вам придется делать это много раз, я бы предложил использовать эволюционный алгоритм в функции SSE в качестве внешнего интерфейса для предоставления начальных значений.
С другой стороны, вы можете использовать GEOGEBRA, чтобы создать функцию, используя ползунки для параметров, и поиграть с ними, чтобы получить начальные значения.
ИЛИ начальные значения из данных могут быть оценены путем наблюдения.
источник
Для начальных значений вы можете сделать обычные наименьшие квадраты. Его наклон и точка пересечения будут начальными значениями для D и E. Самым большим остатком будет начальное значение для A. Положение самого большого остатка будет начальным значением для B. Возможно, кто-то другой может предложить начальное значение для сигмы.
Тем не менее, нелинейные наименьшие квадраты без выведения какого-либо механистического уравнения из предметных знаний - рискованное дело, а выполнение множества отдельных подгонок делает вещи еще более сомнительными. Есть ли какие-либо предметные знания за вашим предложенным уравнением? Существуют ли другие независимые переменные, которые относятся к разнице между 100 или около того отдельными подгонками? Это может помочь, если вы сможете объединить эти различия в одно уравнение, которое будет соответствовать всем данным одновременно.
источник