Seyrek verilerle bir denklem sisteminin çözümü


11

40 bağımsız değişkeni (x1, ..., x40) ve bir bağımlı değişkeni (y) olan bir denklem dizisini çözmeye çalışıyorum. Denklemlerin toplam sayısı (satır sayısı) ~ 300'dür ve y ile öngörülen değer arasındaki toplam kare toplamı hatasını en aza indiren 40 katsayı seti için çözmek istiyorum.

Benim sorunum matris çok seyrek ve seyrek veri ile denklem sistemini çözmek için en iyi yolu bilmiyorum. Veri kümesine bir örnek aşağıda gösterilmiştir:

   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
....

Şu anda bunu çözmek için bir Genetik Algoritma kullanıyorum ve sonuçlar gözlemlenen ve beklenen arasındaki kabaca iki fark faktörü ile ortaya çıkıyor.

Seyrek verilerle bir dizi denklemi çözebilen farklı yöntem veya teknikler önerilebilir.


2
Başlıkta yazım hatası: backup => seyrek.
Aleksandr Blekh

Yanıtlar:


11

Seni doğru anlarsam, seyrek verilerle ( seyrek regresyon ) çoklu doğrusal regresyon söz konusudur . Bunu varsayarak, aşağıdaki kaynakları yararlı bulacağınızı umuyorum .

1) Algoritmalar, notlar, formüller, grafikler ve literatüre referanslar ile NCSU dersi seyrek regresyon üzerinde kayar : http://www.stat.ncsu.edu/people/zhou/courses/st810/notes/lect23sparse.pdf

2) Rekosistem, seyrek regresyon analizi için yararlı olan birçok paket sunar :

3) sahip bir blog yayını seyrek regresyon çözeltisi, örneğin , temel SparseM: http://aleph-nought.blogspot.com/2012/03/multiple-linear-regression-with-sparse.html

4) kullanılarak bir blog sonrası R seyrek matrisler bir içermektedir, primer kullanma ile ilgili glmnet: http://www.johnmyleswhite.com/notebook/2011/10/31/using-sparse-matrices-in-r

5) Konu ile ilgili daha fazla örnek ve konu hakkında StackOverflow'da bulunabilir : /programming/3169371/large-scale-regression-in-r-with-a-sparse-feature-matrix

GÜNCELLEME (yorumunuza dayanarak):

Bir LP problemini kısıtlamalarla çözmeye çalışıyorsanız, bu teorik makaleyi yararlı bulabilirsiniz : http://web.stanford.edu/group/SOL/papers/gmsw84.pdf .

Ayrıca, R paket limSolve'u kontrol edin : http://cran.r-project.org/web/packages/limSolve . Ve genel olarak, CRAN Görev Görünümü "Optimizasyon ve Matematiksel Programlama" daki paketleri kontrol edin : http://cran.r-project.org/web/views/Optimization.html .

Son olarak, "Bilim ve Mühendislikte Sayısal Analiz için R Kullanımı" kitabına bakın (Victor A. Bloomfield tarafından). Yukarıda adı geçen paketlerin bazılarına dayanan, örnekleri içeren seyrek matrislerle (bölüm 5.7, sayfa 99-104) temsil edilen denklem sistemlerinin çözülmesi ile ilgili bir bölümü vardır : http://books.google.com/books? id = 9ph_AwAAQBAJ ve pg = PA99 ve lPG = PA99 ve dq = r + limsolve +, seyrek + matrisi kaynağı = bl & oTS = PHDE8nXljQ & sig = sPi4n5Wk0M02ywkubq7R7KD_b04 ve hl = tr & sa = X ei = FZjiU-ioIcjmsATGkYDAAg & ved = 0CDUQ6AEwAw # v = onepage ve q = r% 20limsolve% 20sparse% 20matrix & f = yanlış .


3
Harika cevap için teşekkürler! Sorunu seyrek regresyon olarak sınıflandırmaktan çekiniyorum çünkü gerçekten modellemeye ve tahmin etmeye değil, bir dizi katsayı için çözmeye çalışıyorum. Genetik Algoritmalar kullanmamın nedeni, denklem üzerinde kısıtlamalar da kullanabilmemdir. Başka cevap gelmezse bunu memnuniyetle kabul ediyorum.
mike1886

1
@ mike1886: Benim için bir zevkti! Yorumunuza dayanarak cevabımı güncelledim. Umarım yardımcı olur.
Aleksandr Blekh

7

Aleksandr'un yanıtı tamamen doğru.

Bununla birlikte, sorunun ortaya çıkma şekli, bunun basit, sıradan en küçük kareler regresyon sorusu olduğunu ima eder: bağımlı bir değişken ile doğrusal bir yordayıcı kombinasyonu arasındaki kare artıkların toplamının en aza indirilmesi.

Şimdi, tasarım matrisinizde çok sayıda sıfır olsa da, sisteminiz aşırı büyük değil: 40 öngörücü üzerinde 300 gözlem orta büyüklükten fazla değildir. Seyrek veriler için özel bir çaba harcamadan R kullanarak böyle bir gerilemeyi gerçekleştirebilirsiniz. Sadece lm()komutu kullanın ("doğrusal model" için). ?lmYardım sayfasını görmek için kullanın . Ve lmvarsayılan olarak sessizce tasarım matrisinize (kesişme noktası) sabit bir sütun ekleyeceğinizi unutmayın - -1bunu bastırmak için formülünüzün sağ tarafına a ekleyin. Genel olarak, tüm verilerinizin (ve başka hiçbir şeyin) bir data.frameçağrıda bulunmadığını varsayarsak foo, bunu yapabilirsiniz:

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

Ardından parametre tahminlerine vb. Şu şekilde bakabilirsiniz:

summary(model)
residuals(model)

Eğer sistem olduğunu çok daha büyük gereğince, uzman seyrek çözümleyici bakarak 10.000 gözlem ve belirleyicileri yüzlerce sırasına söylemek Aleksandr cevabı mantıklı başlayabilir.

Son olarak, Aleksandr'un cevabına yaptığınız yorumda , denkleminizdeki kısıtlamalardan bahsediyorsunuz. Bu aslında önemli bir konu ise, bizzat benzeri R. I kısıtlı en küçük kareler hesaplamak için yollar vardır pcls()içinde mgcvpaketin. Belki de sorunuzu, karşılaştığınız kısıtlama türlerini (kutu kısıtlamaları, negatif olmayan sınırlamalar, bütünlük kısıtlamaları, doğrusal sınırlamalar, ...) içerecek şekilde düzenlemek istersiniz?


1
Stephan, nazik sözlerini takdir ediyorum! Güzel cevabınızı oyladınız. Sorunun yazarının yorumuna dayanarak cevabımda yaptığım güncellemeyle ilgileniyor olabilirsiniz.
Aleksandr Blekh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.