Могли бы вы подсказать, где можно изучить матчасть программы подбора аппроксимирующей функции. Мне бы очень хотелось выполнять это самостоятельно,то есть нужен алгоритм вычислений неизвестных коэффициентов. Неужели берется голая функция,преобразуется и применяется МНК???
Примерно так. Сначала выясняем "что мы знаем о лисе", в смысле о функции, которой приближаем.
Самый богатый в практическом и научном смысле случай - самый скверный с точки зрения поиска приближения. В смысле, если мы зависимость уже знаем, с точностью до коэффициентов. Она, скорее всего, нелинеаризуема. Максимум - можно "привести подобные", в смысле разные коэффициенты при одинаковых членах или заменить
на
. Существенные нелинейности останутся. Тогда только общими методами оптимизации. Где самое неприятное - что оптимум они гарантируют локальный, и мы можем на нём застрять вдали от глобального. Есть критерии нахождения глобального оптимума (Липшица и пр.), но их применение сложно. Работающий, но эмпирический приём - повторить несколько раз оптимизацию, с разными начальными приближениями.
Самый приятный в смысле вычислений случай - когда мы ничего о нашей функции не знаем, и довольствуемся любой хорошо приближающей. В этом случае берём линейную (по параметрам, отдельные регрессоры могут быть по-всякому нелинейны) и считаем МНК. Но это опасный путь, даже если нам нужна лишь интерполяция. Если взять слишком много регрессоров (например, слишком высокую степень полинома) - получим прекрасную подгонку к точкам и очень скверное поведение меж ними. Тут можно вспомнить пример Рунге, с функцией
, которую приближают полиномами всё более высокой степени, беря всё больше точек интерполяции (через которые полином проходит точно, это немного иной случай, чем с МНК, но сходство есть), и между этими точками полином всё более отдаляется от приближаемой функции, начиная "гулять". Для экстраполяции это и вовсе скверно, за пределами точек, на которых построена модель, наша приближающая функция поведёт себя, скорее всего, совершенно отлично от реальности.
(Оффтоп)
"За сто семьдесят шесть лет Нижняя Миссисипи укоротилась на двести сорок две мили, то есть в среднем примерно на милю и одну треть в год. Отсюда всякий спокойно рассуждающий человек, если только он не слепой и не совсем идиот, сможет усмотреть, что в древнюю силурийскую эпоху, - а ей в ноябре будущего года минет ровно миллион лет, - Нижняя Миссисипи имела свыше миллиона трехсот тысяч миль в длину и висела над Мексиканским заливом наподобие удочки. Исходя из тех же данных, каждый легко поймет, что через семьсот сорок два года Нижняя Миссисипи будет иметь только одну и три четверти мили в длину, а улицы Каира и Нового Орлеана сольются, и будут эти два города жить да поживать, управляемые одним мэром и выбирая общий
городской совет. Все-таки в науке есть что-то захватывающее. Вложишь какое-то пустяковое количество фактов, а берешь колоссальный дивиденд в виде умозаключений. Да еще с процентами."
М. Твен
Средний случай, самый весёлый - когда мы что-то о поведении нашей функции f(x,y,z...) знаем, но не точное её выражение. Можем, например, требовать, чтобы f(0,y,z...)=0. Или полагать, что при изменении каких-то параметров она будет к чему-то асимптотически приближаться. Или ожидать, что изменение функции при росте одного из параметров будет пропорционально значению функции. Тогда можно поискать функцию, удовлетворяющую этим условиям, но при этом линеаризуемую. Например, для f(0,y,z...)=0 подойдёт полином с нулевым свободным членом, или произведение (пример из матэкономики - производственная функция Кобба-Дугласа, объём производства в зависимости от труда и капитала, если чего-то одного нет - и производства нет, так что KL, но два завода имеют вдвое капитала K и вдвое больше труда L, но не вчетверо больше продукции, надо притормозить, скажем, корень извлечь, но тут задумываемся, что влияют-то они неодинаково, поэтому одно возведём в степень
, а другое
). Нарастающее пропорционально значению функции возрастание изменения функции в зависимости от изменения аргумента (или - "постоянное относительное изменение") выводит на экспоненту,
, а если одинаковому относительному изменению функции соответствует одинаковое изменение аргумента, то можно взглянуть на степенную
. И та, и та легко линеаризуются логарифмированием. Нулевая асимптота - похоже на обратную величину. Ненулевая -
. И т.п.
Если нам удалось найти подходящую функцию и линеаризовать её - наши трудности не кончились. У нас есть "ошибки". Которые редко ошибки в собственном смысле (измерения, а уж вычислительные сейчас и вовсе казуистика), а скорее совместное влияние неучтённых факторов. Обычно их задают в виде
, и эпсилоны у нас рассматриваются, как нормально распределённые случайные величины с нулевым матожиданием и постоянной дисперсией. Но после линеаризации, после подбора g(x) такой, что
утрачивается и нормальность, и одинаковость распределения. Если они велики - может утратиться даже пригодность к линеаризации, скажем, простейшая степенная модель
, превращаемая логарифмированием в
, после добавления ошибки с большой дисперсией может получить и отрицательные y, что путь логарифмирования закроет. При малых "ошибках", и если g(x) у нас довольно гладкая, можем надеяться сохранить (приближённую) нормальность, а для дисперсий получить оценку их относительной величины. Заменяя
, видим, что среднеквадратичные отклонения стали пропорциональны производным линеаризующей функции, и можно использовать взвешенный МНК, с весами при наблюдениях, обратным значением этих производных. Возникает вопрос, а зачем тогда линеаризация, не проще ли сразу использовать общие нелинейные методы оптимизации? Если их, возможно, придётся употребить для уточнения решения?
(Оффтоп)
"Фугуй, сыной, фугуй! Дядя придёт - топориком подровняет!"
(Дядя Паша, школьный плотник и учитель труда)
Фуганок - очень длинный рубанок для особо ровных поверхностей
Однако тут есть преимущество у линеаризации - линейная задача МНК решение имеет единственное (строго говоря, может быть семейство решений с одинаковым значением критерия, мультиколлинеарность, но это продукт неверного построения модели, включения избыточных параметров, и с этим можно и нужно бороться). И решение линеаризованной задачи будет в большинстве случаев хорошим начальным приближением, лежащим вблизи глобального оптимума и этим снижающим риск "застревания" общего метода в локальном оптимуме.
-- 25 янв 2013, 11:09 --Да, и ещё бывают "почти линеаризуемые". Когда линеаризация получилась бы, если бы знать один или несколько параметров.
Всё прекрасно, если бы не a.
Тут хорошо бы либо получить значение этого параметра из "общих соображений" (в данном случае, например, что a - это минимально возможное значение y, и что-то о нём мы скажем, исходя из знания процесса), или делать перебор возможных значений. Несмотря на грубую эмпиричность - подходит весьма часто. "Полуручной" способ - задаёмся значением a, переходим к
и строим график преобразованных переменных. Меняем a, и смотрим, насколько получившаяся линия прямая. В Excele хотя бы, извините за грубое слово. И вообще бывает полезно взглянуть на график. Не только y от x, но и y' от y или y'/y от x. Можно догадаться о виде функции.
Часто из "общих соображений" получаются значения асимптот, а они не столь редко и оказываются этими самыми "мешающими параметрами". Вот, скажем, оцениваем логистическую функцию
Если понятно, что есть К (максимальный объём знаний, который усвоит ученик, потратив х часов, или максимальный размер животного при корме х), то можно в качестве К взять полный объём знаний курса или биологический предел размера, и тогда
Иногда есть "теоретическая модель". Которая реальность приближает грубо (но, возможно, в асимптотике работает изрядно). Можно искать не саму зависимость, а поправки к теории, в виде отклонений или поправочных коэффициентов, для которых уже линеаризация работает (кстати, так таблицы стрельбы орудий считают - находят после "отстрела" на полигоне поправки к рассчитанной баллистиками таблице).
Ну, и ещё "99 и 7 способов спеть Песню Племени - и каждый по своему хорош".