Решая систему уравнений с разреженными данными


11

Я пытаюсь решить систему уравнений, которая имеет 40 независимых переменных (x1, ..., x40) и одну зависимую переменную (у). Общее количество уравнений (количество строк) составляет ~ 300, и я хочу решить для набора из 40 коэффициентов, который минимизирует общую сумму квадратов ошибки между y и прогнозируемым значением.

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

   y    x1  x2 x3 x4 x5 x6 ... x40
87169   14  0  1  0  0  2  ... 0 
46449   0   0  4  0  1  4  ... 12
846449  0   0  0  0  0  3  ... 0
....

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

Может кто-нибудь предложить различные методы или методы, которые способны решить набор уравнений с разреженными данными.


2
Опечатка в названии: запасной => скудны.
Александр Blekh

Ответы:


11

Если я вас правильно понимаю, это случай множественной линейной регрессии с разреженными данными ( разреженная регрессия ). Предполагая это, я надеюсь, что вы найдете следующие полезные ресурсы .

1) слайды лекций NCSU по разреженной регрессии с обзором алгоритмов, примечаний, формул, графики и ссылок на литературу: http://www.stat.ncsu.edu/people/zhou/courses/st810/notes/lect23sparse.pdf

2) Rэкосистема предлагает множество пакетов , полезных для разреженного регрессионного анализа, в том числе:

3) Сообщение в блоге с примером решения редкой регрессии , основанное на SparseM: http://aleph-nought.blogspot.com/2012/03/multiple-linear-regression-with-sparse.html

4) Пост в блоге об использовании разреженных матриц в R , который включает в себя учебник по использованию glmnet: http://www.johnmyleswhite.com/notebook/2011/10/31/using-sparse-matrices-in-r

5) Дополнительные примеры и некоторые обсуждения по этой теме можно найти в StackOverflow : /programming/3169371/large-scale-regression-in-r-with-a-sparse-feature-matrix

ОБНОВЛЕНИЕ (на основе вашего комментария):

Если вы пытаетесь решить проблему LP с ограничениями, эта теоретическая статья может оказаться полезной: http://web.stanford.edu/group/SOL/papers/gmsw84.pdf .

Также проверьте R пакет limSolve : http://cran.r-project.org/web/packages/limSolve . И вообще, проверьте пакеты в представлении задач CRAN «Оптимизация и математическое программирование» : http://cran.r-project.org/web/views/Optimization.html .

Наконец, проверьте книгу «Использование R для численного анализа в науке и технике» (Виктор А. Блумфилд). В нем есть раздел, посвященный решению систем уравнений, представленный разреженными матрицами (раздел 5.7, стр. 99-104), который включает примеры, основанные на некоторых из вышеупомянутых пакетов: http://books.google.com/books? ID = 9ph_AwAAQBAJ & рд = PA99 & СУГ = PA99 & дк = г + limsolve + разреженным + матрица & источник = бл & отс = PHDE8nXljQ & сиг = sPi4n5Wk0M02ywkubq7R7KD_b04 & гл = еп & са = Х & е = FZjiU-ioIcjmsATGkYDAAg & вед = 0CDUQ6AEwAw # v = OnePage & д = г% 20limsolve% 20sparse% 20matrix & F = ложь .


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

1
@ mike1886: С удовольствием! Я обновил свой ответ, основываясь на вашем комментарии. Надеюсь, поможет.
Александр Блех

7

Ответ Александра полностью правильный.

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

Теперь, хотя в вашей матрице проектирования может быть много нулей, ваша система как таковая не слишком велика: 300 наблюдений по 40 предикторам не более чем средние. Вы можете запустить такую ​​регрессию, используя R без особых усилий для разреженных данных. Просто используйте lm()команду (для «линейной модели»). Используйте, ?lmчтобы увидеть страницу справки. И обратите внимание, что lmпо умолчанию будет тихо добавлять постоянный столбец единиц в вашу матрицу дизайна (точку пересечения) - включите -1в правой части формулы, чтобы подавить это. В целом, предполагая, что все ваши данные (и ничего больше) находятся в data.frameвызываемом foo, вы можете сделать это:

model <- lm(y~.-1,data=foo)

И тогда вы можете посмотреть на оценки параметров и т.д., как это:

summary(model)
residuals(model)

Если ваша система намного больше, скажем, порядка 10 000 наблюдений и сотен предикторов, то поиск специализированных разреженных решателей в соответствии с ответом Александра может начать иметь смысл.

Наконец, в своем комментарии к ответу Александра вы упоминаете ограничения на ваше уравнение. Если это на самом деле ваша ключевая проблема, есть способы вычислить ограниченные наименьшие квадраты в R. Мне лично нравится pcls()в mgcvпакете. Возможно, вы хотите отредактировать свой вопрос, чтобы включить тип ограничений (ограничения блока, ограничения неотрицательности, ограничения целостности, линейные ограничения, ...), с которыми вы сталкиваетесь?


1
Стефан, я ценю твои добрые слова! Upvoted ваш хороший ответ. Возможно, вас заинтересует обновление, которое я внес в свой ответ на основании комментария автора вопроса.
Александр Блех
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.