Розв’язування системи рівнянь із розрідженими даними


11

Я намагаюся вирішити набір рівнянь, який має 40 незалежних змінних (x1, ..., x40) та одну залежну змінну (y). Загальна кількість рівнянь (кількість рядків) становить ~ 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
Напис в заголовку: запасний => рідкий.
Олександр Блех

Відповіді:


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 .

Також перевірте RS- пакет 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
Стефане, я ціную ваші добрі слова! Привітав вашу приємну відповідь. Можливо, вас зацікавить оновлення, яке я внесла до своєї відповіді на основі коментаря автора запитання.
Олександр Блех
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.