2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Аппроксимация экспериментальных данных. Подбор модели.
Сообщение13.02.2016, 17:08 


21/05/14
14
Здравствуйте.
Столкнулся с такой задачей. Имеется набор данных, нужно подобрать модель для аппроксимации.
Изображение
Использую Curve Fitting tool в MATLAB. Встал вопрос в выборе модели. Стандартные модели пакета достаточного приближения не дают.
Пытался использовать полиномы Эрмита, результат также спорный.
Подскажите, какие общие методы есть для выбора модели аппроксимации. Буду очень благодарен, если подкините какой-либо вариантик.
В данной сфере не специалист, поэтому рад принять любые ссылки на литературу, посвященные данному вопросу.
Заранее спасибо.

П.С. По оформлению сообщения могут быть ошибки (пишу на форум впервые), прошу прощения у администрации, буду готов исправить)

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение13.02.2016, 17:18 
Заслуженный участник


09/05/12
25179
Vanish в сообщении #1099114 писал(а):
Подскажите, какие общие методы есть для выбора модели аппроксимации.

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

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

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение13.02.2016, 17:51 
Заслуженный участник


05/08/14
1564
Pphantom в сообщении #1099118 писал(а):
Вы из каких-то внешних соображений должны знать, что интересующая Вас зависимость, например, экспоненциальна, а уже затем искать ее параметры по имеющимся данным.
Соответственно, в такой постановке Ваш вопрос лишен смысла, подобных методов нет и быть не может.

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

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение13.02.2016, 18:18 
Заслуженный участник


09/05/12
25179
dsge в сообщении #1099126 писал(а):
Не обязательно. Существуют же сплайны или непараметрические методы, типа ядерных регрессий.
Существуют, но и в этих случаях явно или неявно предполагается какой-то конкретный вид аппроксимирующей функции, следующий из внешних соображений. Например, для кубического сплайна это минимизация максимума модуля второй производной. Если же об этом вообще не думать, то достаточно построить интерполяционный полином (что, по-видимому, ТС все же не устраивает, но он не объясняет, почему).

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение13.02.2016, 22:15 


17/10/08

1313
Скорее, нужны требования / критерии, предъявляемые к функции.
Требовать заранее вид функции, в которой нужно подобрать числовые параметры, - избыточно.

Общая методика может состоять в поиске в пространстве функций, где в качестве критерия задается точность и требования к функции аппроксимации. Таким способом была найдена следующая функция:

Код:
f(x) = 1+x+2.78228635989394*x/(0.0453510179105356+x)


Она уходит в бесконечность в районе нуля, но такого ограничения от ТС не было.

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение13.02.2016, 22:30 
Заслуженный участник


09/05/12
25179
mserg в сообщении #1099177 писал(а):
Скорее, нужны требования / критерии, предъявляемые к функции.
Требовать заранее вид функции, в которой нужно подобрать числовые параметры, - избыточно.
В общем, так или иначе нужно задать класс функций, в котором требуется найти решение. Мы, по сути дела, обсуждаем вопрос о том, насколько широким этот класс может быть.

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение14.02.2016, 00:50 
Заслуженный участник


07/07/09
5408
В качестве примера можно бы посмотреть на экспериментальные точки сигнала , обсуждаемой сейчас гравитационной волны .
https://losc.ligo.org/s/events/GW150914 ... rved-H.png
Этот сигнал ожидают в форме, приведённой на втором графике.
https://losc.ligo.org/s/events/GW150914 ... form-H.png
Некоторые праметры второй кривой подбрали так(наверно), чтобы сумма квадратов отклонений ее точек от точек экспериментальной кривой была минимальной.
Полином бы в этом случае не многое прояснил.

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение14.02.2016, 09:58 


21/05/14
14
Понял вас, господа, тогда формулирую дополнительные условия:
- аппроксимирующая функция должна иметь аналитическое выражение;
- максимально точно (в смысле среднеквадратичного отклонения, например) проходить через заданные точки;
- интересует поведение функции на заданном конкретном интервале.

To Pphantom:
Проблема в том, что трудно сказать, какого рода интересующая зависимость. Ось абсцисс - средние показания датчика давления (давление задается контроллером), ось ординат - нормированная дисперсия полученных показаний.
Если есть теоретические предпосылки рода данной зависимости, буду рад слышать.

To dsge:
Я согласен, можно интерполировать сплайнами. Но мы же при этом не получаем аналитическую запись функции. Или я не правильно понимаю?

Цитата:
Общая методика может состоять в поиске в пространстве функций, где в качестве критерия задается точность и требования к функции аппроксимации. Таким способом была найдена следующая функция:

Код:
$f(x) = 1+x+2.78228635989394 \cdot x/(0.0453510179105356+x)$)


Она уходит в бесконечность в районе нуля, но такого ограничения от ТС не было.


А можете объяснить, как была получена эта функция? Исходя из каких соображений?
Вопрос о точке разрыва в 0 интересен, вполне возможно, что и с этим можно использовать ее! :-)

Прошу не судить строго за возможно глупые вопросы :-( Сам студент, опыт в решении подобного рода задач очень небольшой.
Но есть желание учиться, поэтому благодарен за любые советы!! :roll:

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение14.02.2016, 12:42 


17/10/08

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

Ниже приведено начало журнала работы программы:
Код:
Func: v As Float
  1. x As Float
Fitness function: (DiscOf+0.06)*Exp(0.1*SizeOf)
v(0)=0
Discrepancy function: (v(x)-y)^2
Hash function: Round(v(x),3)
Signatures: { "* 2", "/ 2", "- 2", "+ 2", "- 1", "ln 1", "exp 1", "abs 1", "Float 0" }
Arg Call Count Limit=3
Const Count Limit=4
+[1]: x  x
+[2]: xx0  xx0
New[1]: -0.441101758181587 x 3.21435729926719 2.84847075931396 1
* +Global Record[1]: x 3.21435729926719 2.84847075931396 1
Stats: tot=2 tree=0 fitfail=0 optcall=0 recs=1 hrej=0 hrep=0 rectrunc=0
optimize[2]: xx0 4.76337895541391 2.82913538028847 5
New[2]: 0 xx0 4.76337895541391 2.82913538028847 5
+Global Record[2]: 0 4.76337895541391 2.82913538028847 5
* Global Integer Record[2]: False 3.19298840067825 2.82913538028847 1
Stats: tot=2 tree=0 fitfail=0 optcall=1 recs=2 hrej=0 hrep=0 rectrunc=0
* Up lower bound: 0 --> 0.0663102550845389 1
--r Select[2]: xx0 4.76337895541391 2.83E+00 5
Stats: tot=2 tree=0 fitfail=0 optcall=1 recs=2 hrej=0 hrep=0 rectrunc=0
+[3]: x+xx0  xx0+x
-[3]: x-xx0  xx0+x
+[4]: xx0-x  xx0+ -x
+[5]: x*xx0  xx0*x
-[5]: x/xx0  xx0*x
+[6]: xx0/x  xx0*x^ -1
tol=6  added=4
optimize[3]: x+xx0 5.85694086616721 2.84847075931396 7 -[1]
optimize[4]: xx0-x 5.93714180049986 2.8882973646539 7
New[4]: 0.441101758181587 xx0-x 5.93714180049986 2.8882973646539 7
...

Критерий поиска представляет собой выражение (DiscOf+0.06)*Exp(0.1*SizeOf), где DiscOf погрешность на одно измерение, SizeOf - "размер" (простота, суть бритва Оккама) искомой функции. Т.е. для улучшение критерия поиска, линейному увеличение "количества закорючек" в аппроксимирующей функции должно соответствовать экспоненциальному уменьшение погрешности.

Но в реальности компромисс между простотой и точностью довольно трудно подобрать. Поэтому в качестве результата можно получать функции в зависимости от количества "закорючек в функции". Так, результат решения приведен ниже, где последнее число в строке - "количество закорючек", "предпоследнее" - точность, пред-предпоследнее - значение критерия поиска, выражение еще левее- сама функция.
Код:
Total Global record[1711] : 1+x+2.78228635989394*x/(0.0453510179105356+x) 2.30325445568784 0.360766640755218 17
Total Global subrecord[2]: 1 3.19298840067825 2.82913538028847 1
Total Global subrecord[14]: 1+Abs(x) 3.0375533379119 2.42693833186315 2
Total Global subrecord[29]: 1+Abs(x+x) 3.15559420616488 2.05525805354624 4
Total Global subrecord[39]: 1+Abs(x+x+x) 3.26857585045849 1.73383246018755 6
Total Global subrecord[22]: 1+5.21834833717729*Abs(x) 3.20427367258679 1.37977297005151 8
Total Global subrecord[55]: 1+(x+5.21834833717729)*Abs(x) 3.87315845973987 1.36485536973755 10
Total Global subrecord[1697]: 1+(x+x)/(0.0610372111860029+x) 2.84728582451262 0.887779118003694 11
Total Global subrecord[9973]: 1+Ln(Exp(x)+Abs((-41.074875125693)*x)) 3.01663778463529 0.848593840167798 12
Total Global subrecord[2891]: 1+Abs((x+x)/((-0.0544893976514991)+Abs(x))) 2.91797574682508 0.735241162312001 13
Total Global subrecord[1701]: 1+2.83071098771745*x/(0.0294951297261624+x) 2.3954389719412 0.474494681435031 15
Total Global subrecord[24211]: 1+x+2.65694038556965*x/Ln(0.0439244877623086+Exp(x)) 2.76974072822774 0.354266296325719 19
Total Global subrecord[23112]: 1+((-2.96712174678618)-x)*x/Ln((-0.0449906928246921)+Exp(-x)) 3.03053979970898 0.350138962153442 20
Total Global subrecord[23043]: 1+(-1.25041321126017)*x/Ln(0.544461484366544+Exp((-0.829739359006278)-x)) 4.07164918255577 0.34821883908794 23
Total Global subrecord[24641]: 1+(3.59423091421308-Exp((-0.384745387131403)-x))*x/(0.0397417309162283+x) 4.4407184355607 0.342852887608628 24
Total Global subrecord[28071]: 1+(4.43888006611709-Exp(0.401787083760687*Exp(-x)))*x/(0.0384088844892154+x) 5.3998904927908 0.341069188865136 26
Total Global subrecord[3422]: 1+Abs(2.92426973874349*x/(x*0.182078589529588+Abs((-1.02000310355838)+Exp(-x)))) 5.67593934334244 0.321454413849047 27
Total Global subrecord[4181]: 1+Abs(4.06094771991911*x/(Exp(x)*(-0.45605361473599)+Abs((-0.602199881519801)+Exp((-0.976659674898583)*x)))) 9.7027723813358 0.297868977996936 33
Total Global subrecord[8520]: 1+Exp(Exp(1.23098953416086-Abs((-2.29789963761277)*((-0.937858579415315)+Exp(x)))))*Abs(Exp(0.557330786939697+x)*x) 11.841348122993 0.29757772950717 35
Total Global subrecord[8586]: 1+Exp(Exp(1.37363922312694-Abs(2.05655507143861*((-0.946808074726886)+Exp(x)))))*Abs(Exp((-0.901804828587998)+Exp(x))*x) 11.9487445258995 0.266484179019285 36

В принципе, можно посмотреть на мелкой сетке все функции, имеющие погрешность не более 0.4, и выбрать подходящую. Самая точная и самая "сложная" функция - последняя; она дает погрешность 0.266484179019285 на одно измерение.

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

Всегда существует вопрос, можно ли пользоваться полученной аппроксимацией. Один из методов проверки называется "перекрестная проверка" (cross-checking). Суть его заключается в том, что множество исходных данных делят на обучающее и проверочное множество. На обучающем производят аппроксимацию, а на тестовом проверяют точность. При использовании деления данных на обучающее и проверочное есть нюансы, касательные оценки простоты функции (подбираемые при обучении константы учитываются особым образом).
Более подробно, как производить проверку и какие подводные камни встречаются, рассматривается в DataMining.

UPD. Дополнительные требования при подборе функции встречались следующие:
1. Должна проходить через некоторые заданные точки
2. Диапазон допустимых значений функции
3. Особые точки
4. Значения функции при предельных значениях аргументов
5. Степень гладкости функции
6. Монотонность функции (неубывание)
7. Аналитичность (что не всегда обязательно); также рассматриваются разные варианты с разрешением задания функции дифференциальным / функциональным уравнением
....

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение14.02.2016, 13:22 
Заслуженный участник
Аватара пользователя


23/07/08
10653
Crna Gora
Vanish в сообщении #1099223 писал(а):
Ось абсцисс - средние показания датчика давления (давление задается контроллером), ось ординат - нормированная дисперсия полученных показаний.
Не возникает ли у Вас в ходе такой нормировки в точке $P=0$ дробь с малым (меньшим, чем в других точках) знаменателем? Если да, скажите нам.

Это будет означать, что всплеск при $P=0$ на графике обусловлен скорее большой погрешностью частного при малом знаменателе, чем какими-то физическими причинами, и пытаться его поточнее аппроксимировать не имеет смысла.

В таком случае надо либо для различных точек задавать разный вес «достоверности», либо работать с ненормированными данными (т.е. сначала аппроксимировать, а потом нормировать).

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение14.02.2016, 13:35 
Заслуженный участник


07/07/09
5408
Понял физику так, что есть датчик давления , соединенный с регулирующей давление системой.
В точке 0 давление измеряется , но не регулируется(регулятор не нужен и не работает). В других точках (ниже и выше нуля) регулятор работает и поэтому добавляет свою относительную нестабильность к нестабильности датчитка.

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение14.02.2016, 13:47 
Заслуженный участник
Аватара пользователя


23/07/08
10653
Crna Gora
Да, а нормирует автор на значение дисперсии в нуле, и потому получается ровно единица. Да, скорее, так.

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение14.02.2016, 15:47 
Заслуженный участник


05/08/14
1564
Vanish в сообщении #1099223 писал(а):
Я согласен, можно интерполировать сплайнами. Но мы же при этом не получаем аналитическую запись функции. Или я не правильно понимаю?

Неправильно, на каждом участке это полином третьей степени с конкретными коэффициентами. Другое дело, что некоторые программы, когда сглаживают сплайнами, не указывают эти коэффициенты. Пример - Эксель строит сглаженные кривые используя сплайны, но значения этих коэффициентов не выдает.

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение14.02.2016, 21:22 
Заслуженный участник


09/05/12
25179
Vanish в сообщении #1099223 писал(а):
- аппроксимирующая функция должна иметь аналитическое выражение;
- максимально точно (в смысле среднеквадратичного отклонения, например) проходить через заданные точки;
Этого явно недостаточно. Иначе - чем Вас не устраивает интерполяционный полином? Аналитическое выражение есть, через заданные точки он проходит, т.е. отклонения нулевые.
Vanish в сообщении #1099223 писал(а):
Проблема в том, что трудно сказать, какого рода интересующая зависимость. Ось абсцисс - средние показания датчика давления (давление задается контроллером), ось ординат - нормированная дисперсия полученных показаний.
Если есть теоретические предпосылки рода данной зависимости, буду рад слышать.
Из такого описания их не получить, но вообще-то это дисперсия реализаций какой-то случайной функции, которая принципиально может получиться из какой-то теории. Т.е. ответ на этот вопрос стоит попытаться найти.

 Профиль  
                  
 
 Re: Аппроксимация экспериментальных данных. Подбор модели.
Сообщение15.02.2016, 13:41 


21/05/14
14
Спасибо вам большое за содержательные ответы!

to mserg: Здорово, доступно объяснили весь принцип! Хотелось бы спросить, с помощью какого софта реализуется такой поиск, если не секрет) Очень любопытно! Проблема реализации в домашних условиях: сильная специализированность данного софта или\и вычислительные мощности?

to Xey, svv: Да, физический принцип понят абсолютно верно. Задающий контроллер вносит дополнительные шумы, при $P=0$ шумит сам датчик. Нормировка осуществлялась $\frac{D(P)}{D(P=0)}$.
Прошу прощения, что не расписал сразу (иногда забываешь, что для других людей чужая тема - темный лес :-) ).

to Pphantom: Согласен, определенно стоит подумать над теоретической трактовкой формулы.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group