Регрессия наименьших квадратов в C / C ++ - PullRequest
2 голосов
/ 04 февраля 2010

Как можно было бы реализовать регрессию наименьших квадратов для факторного анализа в C / C ++?

Ответы [ 7 ]

5 голосов
/ 04 февраля 2010

золотой стандарт для этого равен LAPACK .Вы хотите, в частности, xGELS.

2 голосов
/ 04 февраля 2010

Когда мне приходилось иметь дело с большими наборами данных и большими наборами параметров для нелинейного подбора параметров, я использовал комбинацию RANSAC и Левенберга-Марквардта. Я говорю о тысячах параметров с десятками тысяч точек данных.

RANSAC - это надежный алгоритм для минимизации шума из-за выбросов с использованием сокращенного набора данных. Это не совсем наименьшие квадраты, но может применяться ко многим подходящим методам.

Левенберг-Марквардт - эффективный способ численного решения нелинейных наименьших квадратов. Скорость сходимости в большинстве случаев находится между методом наискорейшего спуска и методом Ньютона, не требуя вычисления вторых производных. Я обнаружил, что он быстрее, чем градиент сопряжения в рассмотренных случаях.

То, как я это сделал, было настроить RANSAC на внешнюю петлю вокруг метода LM. Это очень надежно, но медленно. Если вам не нужна дополнительная надежность, вы можете просто использовать LM.

1 голос
/ 04 февраля 2010

Если вы хотите реализовать алгоритм оптимизации самостоятельно, то кажется, что Levenberg-Marquard реализовать довольно сложно. Если действительно быстрая сходимость не требуется, взгляните на алгоритм симплексной оптимизации Nelder-Mead. Это может быть реализовано с нуля за несколько часов.

http://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method

1 голос
/ 04 февраля 2010

Получите ROOT и используйте TGraph::Fit() (или TGraphErrors::Fit())?

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

Или используйте GSL .

0 голосов
/ 10 февраля 2010

Давайте сначала поговорим о факторном анализе, так как большая часть вышеприведенного обсуждения касается регрессии.Большая часть моего опыта связана с такими программами, как SAS, Minitab или SPSS, которые решают уравнения факторного анализа, поэтому у меня ограниченный опыт их непосредственного решения.Тем не менее, наиболее распространенные реализации не используют линейную регрессию для решения уравнений.Согласно this , наиболее распространенными методами являются анализ главных компонентов и анализ основных факторов.В тексте «Прикладной многомерный анализ» (Даллас Джонсон) задокументировано не менее семи методов, каждый из которых имеет свои плюсы и минусы.Я настоятельно рекомендую найти реализацию, которая дает вам факторные оценки, а не программировать решение с нуля.

Причина, по которой существуют разные методы, заключается в том, что вы можете выбрать именно то, что пытаетесь минимизировать.Здесь достаточно подробное обсуждение широты методов .

0 голосов
/ 05 февраля 2010

Я использовал TNT / JAMA для линейной оценки наименьших квадратов.Это не очень сложно, но довольно быстро + просто.

0 голосов
/ 04 февраля 2010

Взгляните на http://www.alglib.net/optimization/

У них есть реализации C ++ для L-BFGS и Levenberg-Marquardt.

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

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