Ich versuche, einen Satz von Gleichungen zu lösen, der 40 unabhängige Variablen (x1, ..., x40) und eine abhängige Variable (y) enthält. Die Gesamtzahl der Gleichungen (Anzahl der Zeilen) beträgt ~ 300, und ich möchte nach dem Satz von 40 Koeffizienten suchen, der den gesamten quadratischen Fehlersummen zwischen y und dem vorhergesagten Wert minimiert.
Mein Problem ist, dass die Matrix sehr dünn ist und ich nicht weiß, wie ich das Gleichungssystem mit spärlichen Daten am besten lösen kann. Ein Beispiel für den Datensatz ist unten dargestellt:
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
....
Ich verwende derzeit einen genetischen Algorithmus, um dies zu lösen, und die Ergebnisse werden mit einem Faktor von ungefähr zwei Unterschieden zwischen beobachtet und erwartet veröffentlicht.
Kann jemand verschiedene Methoden oder Techniken vorschlagen, die in der Lage sind, einen Satz von Gleichungen mit spärlichen Daten zu lösen.
quelle
Antworten:
Wenn ich Sie richtig verstehe, ist dies der Fall einer multiplen linearen Regression mit spärlichen Daten ( spärliche Regression ). Unter der Annahme, dass Sie die folgenden Ressourcen nützlich finden.
1) NCSU- Vorlesungsfolien zur spärlichen Regression mit Überblick über Algorithmen, Notizen, Formeln, Grafiken und Literaturhinweise: http://www.stat.ncsu.edu/people/zhou/courses/st810/notes/lect23sparse.pdf
2)
R
Ökosystem bietet viele Pakete , die für spärliche Regressionsanalysen nützlich sind, einschließlich:3) Ein Blog-Beitrag mit einem Beispiel für eine Lösung mit geringer Regression , basierend auf
SparseM
: http://aleph-nought.blogspot.com/2012/03/multiple-linear-regression-with-sparse.html4) Ein Blog-Beitrag zur Verwendung spärlicher Matrizen in R , der eine Einführung zur Verwendung von
glmnet
: http://www.johnmyleswhite.com/notebook/2011/10/31/using-sparse-matrices-in-r enthält5) Weitere Beispiele und einige Diskussionen zu diesem Thema finden Sie auf StackOverflow : /programming/3169371/large-scale-regression-in-r-with-a-sparse-feature-matrix
UPDATE (basierend auf Ihrem Kommentar):
Wenn Sie versuchen, ein LP-Problem mit Einschränkungen zu lösen, ist dieses theoretische Dokument möglicherweise hilfreich: http://web.stanford.edu/group/SOL/papers/gmsw84.pdf .
Überprüfen Sie auch das R-Paket limSolve : http://cran.r-project.org/web/packages/limSolve . Überprüfen Sie im Allgemeinen die Pakete in der CRAN-Aufgabenansicht "Optimierung und mathematische Programmierung" : http://cran.r-project.org/web/views/Optimization.html .
Lesen Sie abschließend das Buch "Verwenden von R für die numerische Analyse in Wissenschaft und Technik" (von Victor A. Bloomfield). Es enthält einen Abschnitt zum Lösen von Gleichungssystemen, dargestellt durch spärliche Matrizen (Abschnitt 5.7, Seiten 99-104), der Beispiele enthält, die auf einigen der oben genannten Pakete basieren: http://books.google.com/books? id = 9ph_AwAAQBAJ & pg = PA99 & LPG = PA99 & dq = r + limsolve + sparse + Matrix & source = bl & OTS = PHDE8nXljQ & sig = sPi4n5Wk0M02ywkubq7R7KD_b04 & hl = en & sa = X & ei = FZjiU-ioIcjmsATGkYDAAg & ved = 0CDUQ6AEwAw # v = OnePage & q = r% 20limsolve% 20sparse% 20matrix & f = false .
quelle
Aleksandrs Antwort ist völlig richtig.
Die Art und Weise, wie die Frage gestellt wird, impliziert jedoch, dass dies eine einfache gewöhnliche Regressionsfrage der kleinsten Quadrate ist: Minimierung der Summe der quadratischen Residuen zwischen einer abhängigen Variablen und einer linearen Kombination von Prädiktoren.
Obwohl Ihre Entwurfsmatrix möglicherweise viele Nullen enthält, ist Ihr System als solches nicht übermäßig groß: 300 Beobachtungen mit 40 Prädiktoren sind nicht mehr als mittelgroß. Sie können eine solche Regression mit R ausführen, ohne besondere Anstrengungen für spärliche Daten zu unternehmen. Verwenden Sie einfach den
lm()
Befehl (für "lineares Modell"). Verwenden Sie?lm
diese Option , um die Hilfeseite anzuzeigen. Beachten Sie außerdem, dasslm
Ihrer Entwurfsmatrix (dem Achsenabschnitt) standardmäßig eine konstante Spalte mit Einsen hinzugefügt wird. Fügen Sie-1
auf der rechten Seite Ihrer Formel ein ein, um dies zu unterdrücken. Unter der Annahme, dass alle Ihre Daten (und nichts anderes)data.frame
aufgerufen werdenfoo
, können Sie Folgendes tun:Und dann können Sie sich Parameterschätzungen usw. wie folgt ansehen:
Wenn Ihr System viel größer ist, beispielsweise in der Größenordnung von 10.000 Beobachtungen und Hunderten von Prädiktoren, kann es sinnvoll sein, spezialisierte, spärliche Löser gemäß Aleksandrs Antwort zu betrachten.
Schließlich erwähnen Sie in Ihrem Kommentar zu Aleksandrs Antwort Einschränkungen für Ihre Gleichung. Wenn dies tatsächlich Ihr Hauptproblem ist, gibt es Möglichkeiten, eingeschränkte kleinste Quadrate in R zu berechnen. Ich persönlich mag
pcls()
dasmgcv
Paket. Vielleicht möchten Sie Ihre Frage so bearbeiten, dass sie die Art der Einschränkungen (Box-Einschränkungen, Nicht-Negativitäts-Einschränkungen, Integralitäts-Einschränkungen, lineare Einschränkungen, ...) enthält, mit denen Sie konfrontiert sind?quelle