LINUX.ORG.RU

2d фит 2 порядка

 , ,


0

1

Товарищи, ищу что-нибудь уже специфически-оптимизированное под такую задачу:

имеется - координаты множества точек на плоскости, тыщ десять плюс-минус.

Надо пофитить их произвольной (или хотя бы только гиперболической, кажись, у меня все входные данные на гиперболу похожи) кривой второго порядка какой-нибудь адекватной метрикой, например, минимизацией суммы квадратов расстояний до кривой.

Gnu scientific library и всякие стандартные фиты в R или очень медленно оптимизируют вблизи оптимальных значений или расходятся в щи при хоть немного косячных стартовых параметров кривой. Я написал кое-как цепочку из разных фитов и отжигов, но это как-то очень всё кустарно выглядит и работает долго. И алхимично.

Было бы круто, если бы оказалось, что у меня корявый гугл и кто-то уже решил такую задачу. Казалось бы, такие задачи должны довольно часто встречаться.

Ответ на: комментарий от Slesarev

мой ник [at]gmail.com

Я тебе очень советую посмотреть пдфку, которую я тебе синул. Ребята в твоем пдф занимаются каким-то мракобесием. Там реально линейная задача, решается в матлабе в 5 строчек по-нормальному. Завтра тебе скину как.

maggotroot
()
Ответ на: комментарий от maggotroot

Вот везде пишут, что это простейшая проблема в computer vision. Тогда должны же быть готовые библиотеки, ну просто полюбому должны быть!

Slesarev
() автор топика
Ответ на: комментарий от Slesarev

Вот везде пишут, что это простейшая проблема в computer vision. Тогда должны же быть готовые библиотеки, ну просто полюбому должны быть!

computer vision это OpenCV и альтернативы: SimpleCV, LibCCV, ...

dn2010 ★★★★★
()

Ха! Нашёл, вроде бы готовенькое. Есть фортранова библиотека odrpack, которой сто лет в обед, скомпилю ли я её и вообще фортран я почти забыл.

Но чтобы потестить, стоит оно того или нет, есть в scipy её питонова обёртка. Ща попробуем.

Slesarev
() автор топика
Ответ на: комментарий от dn2010

Спасибо, если скипи меня расстроит, попробую.

Slesarev
() автор топика
Ответ на: комментарий от dn2010

В OpenCV фит есть только для эллипса и он похоже сделан при помощи топора и зубила.

В SimpleCV я ничего подобного не нашёл, ибо это, видимо, не simple

В LibCCV я это не нашёл, но она здоровая, а документация почему-то только в гипертексте и искать трудно. Похоже, тоже не фитит, ибо это не нужно в модерновом зрении, я так понял авторов. Странно.

Жаль.

Slesarev
() автор топика
Ответ на: комментарий от Slesarev

Ну по идее то, что тебе нужно, это оптимизация нескольких параметров с нормализацией этих параметров. Оптимизация это либо прямой градиентный спуск (steepest-descent), либо conjugated gradient (Fletcher-Reeves, например), либо инвертирование матрицы в методе Ньютона. Все три идут в локальный минимум, чтобы этого не происходило, используют коррекцию методов, либо иногда делающую неоптимальные шаги в том числе вверх, либо подымающуюся из минимума наверх и снова скатывающуюся в другой минимум (Simulated annealing). Ну и большой вопрос какую функцию ошибки оптимизировать, по идее тебе как-то надо привести параметры к одной степени, чтобы методы многомерной оптимизации нормально работали, поэтому вместо стандартной суммы квадратов разности сейчас есть достаточно много вариантов.

https://www.coursera.org/course/ml

dn2010 ★★★★★
()
Ответ на: комментарий от dn2010

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

dn2010 ★★★★★
()

кажись, у меня все входные данные на гиперболу похожи

Такое можно попробовать, если непонятно какую модель использовать.

ebantrop
()
Ответ на: комментарий от Slesarev

Кстати, привет физикам частиц. Или есть ещё кто-то кто юзает рут? Мне его чуваки из ЦЕРНа показали как Ъ рисовалку графиков, хотя по-моему R и помощнее и коммьюнити у него побольше.

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

morse ★★★★★
()
Ответ на: комментарий от maggotroot

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

Какую бы параметризацию взять получше? У этого Жанга обсуждается по сути одна параметризация - раскрытый полином - и 3 нормировки коэффициентов, но в главе про МНК на геометрической метрике он внезапно переходит к свёрнутому полиному. А ещё есть параметрическое задание кривой где отдельно 2 канонических коэффициента и поворот-сдвиг, а ещё Кеплер-стайл задание с фиксацией разности расстояния до фокусов. Чернов эт ал говорит, что Кеплеровский вид лучший, но у меня есть сомнения.

Slesarev
() автор топика
Ответ на: комментарий от ebantrop

Ява растекашися мыслью по оперативной памяти. Коей у меня 16г, но оно всё равно зависло.

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

Slesarev
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.