Я пытаюсь решить систему уравнений, которая имеет 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
....
В настоящее время я использую Генетический алгоритм для решения этой проблемы, и результаты получаются примерно с двухкратным различием между наблюдаемым и ожидаемым.
Может кто-нибудь предложить различные методы или методы, которые способны решить набор уравнений с разреженными данными.
источник
Ответы:
Если я вас правильно понимаю, это случай множественной линейной регрессии с разреженными данными ( разреженная регрессия ). Предполагая это, я надеюсь, что вы найдете следующие полезные ресурсы .
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.html4) Пост в блоге об использовании разреженных матриц в R , который включает в себя учебник по использованию
glmnet
: http://www.johnmyleswhite.com/notebook/2011/10/31/using-sparse-matrices-in-r5) Дополнительные примеры и некоторые обсуждения по этой теме можно найти в 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 = ложь .
источник
Ответ Александра полностью правильный.
Однако способ постановки вопроса подразумевает, что это простой обычный регрессионный вопрос наименьших квадратов: минимизация суммы квадратов невязок между зависимой переменной и линейной комбинацией предикторов.
Теперь, хотя в вашей матрице проектирования может быть много нулей, ваша система как таковая не слишком велика: 300 наблюдений по 40 предикторам не более чем средние. Вы можете запустить такую регрессию, используя R без особых усилий для разреженных данных. Просто используйте
lm()
команду (для «линейной модели»). Используйте,?lm
чтобы увидеть страницу справки. И обратите внимание, чтоlm
по умолчанию будет тихо добавлять постоянный столбец единиц в вашу матрицу дизайна (точку пересечения) - включите-1
в правой части формулы, чтобы подавить это. В целом, предполагая, что все ваши данные (и ничего больше) находятся вdata.frame
вызываемомfoo
, вы можете сделать это:И тогда вы можете посмотреть на оценки параметров и т.д., как это:
Если ваша система намного больше, скажем, порядка 10 000 наблюдений и сотен предикторов, то поиск специализированных разреженных решателей в соответствии с ответом Александра может начать иметь смысл.
Наконец, в своем комментарии к ответу Александра вы упоминаете ограничения на ваше уравнение. Если это на самом деле ваша ключевая проблема, есть способы вычислить ограниченные наименьшие квадраты в R. Мне лично нравится
pcls()
вmgcv
пакете. Возможно, вы хотите отредактировать свой вопрос, чтобы включить тип ограничений (ограничения блока, ограничения неотрицательности, ограничения целостности, линейные ограничения, ...), с которыми вы сталкиваетесь?источник