スパースデータを含む方程式系を解く


11

40の独立変数(x1、...、x40)と1つの従属変数(y)を含む方程式のセットを解こうとしています。方程式の合計数(行数)は約300であり、yと予測値の間の平方和誤差の合計を最小化する40個の係数のセットを解きたい。

私の問題は、行列が非常にスパースであり、スパースデータを使用して連立方程式を解くための最良の方法がわかりません。データセットの例を以下に示します。

   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倍の違いで出てきます。

スパースデータを使用して方程式のセットを解くことができるさまざまな方法や手法を誰かが提案できますか?


2
タイトルのタイプミス:スペア=>スパース。
Aleksandr Blekh 2014

回答:


11

私があなたを正しく理解している場合、これはスパースデータを使用した多重線形回帰スパース回帰)の場合です。それを前提として、以下のリソースがお役に立てば幸いです。

1)NCSU 講義は、アルゴリズム、ノート、数式、グラフィックス、および文献への参照の概要を含むスパース回帰について説明します。http://www.stat.ncsu.edu/people/zhou/courses/st810/notes/lect23sparse.pdf

2)Rエコシステムは、スパース回帰分析に役立つ多くのパッケージを提供します。

3)以下に基づくスパース回帰ソリューションの例を含むブログ投稿SparseMhttp : //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 Task View "Optimization and Mathematical Programming"http : //cran.r-project.org/web/views/Optimization.htmlでパッケージを確認してください

最後に、 Victor A. Bloomfield 著」の「Using R for Numerical Analysis in Science and Engineering」という本を確認してください。これには、疎行列で表される連立方程式の解法に関するセクション(セクション5.7、99〜104ページ)があり、上記のパッケージのいくつかに基づいた例が含まれています。http://books.google.com/books? ID = 9ph_AwAAQBAJ&PG = PA99&LPG = PA99&DQ = R + limsolve +スパース+マトリクス・ソース= BL&OTS = PHDE8nXljQ&SIG = sPi4n5Wk0M02ywkubq7R7KD_b04&HL = EN&SA = X&EI = FZjiU-ioIcjmsATGkYDAAg&VED = 0CDUQ6AEwAw#V = 1ページ分&Q = R%20limsolve%20sparse%20matrix&F = FALSE


3
すばらしい答えをありがとう!私は問題をスパース回帰として分類することをためらっています。なぜなら、私は実際にモデル化して予測しようとするのではなく、一連の係数を解決しようとしているからです。私が遺伝的アルゴリズムを使用している理由は、方程式に制約を適用することもできるからです。他に回答がない場合は、喜んでこれを受け入れます。
mike1886 2014

1
@ mike1886:どういたしまして!あなたのコメントに基づいて、回答を更新しました。それが役に立てば幸い。
Aleksandr Blekh 2014

7

アレクサンダーの答えは完全に正しいです。

ただし、質問の提示方法は、これが単純な通常の最小二乗回帰の質問であることを意味します。従属変数と予測子の線形結合の間の二乗残差の合計を最小化します。

ここで、設計行列には多くのゼロが存在する可能性がありますが、システム自体はそれほど大きくありません。40の予測子での300の観測は、中規模のサイズにすぎません。Rを使用して、スパースデータを特別に作成しなくても、このような回帰を実行できます。lm()コマンドを使用するだけです(「線形モデル」の場合)。?lmヘルプページを表示するために使用します。またlm、デフォルトでは、1の定数列を暗黙的に設計行列(切片)に追加することに注意してください-1。これを抑制するには、式の右側にを含めます。全体として、すべてのデータ(および何も)がdata.frame呼び出されたにあると想定するとfoo、これを行うことができます。

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

そして、あなたはこのようにパラメータ推定などを見ることができます:

summary(model)
residuals(model)

システムがはるかに大きい場合、たとえば約10,000の観測と数百の予測子の場合、Aleksandrの回答に従って特殊なスパースソルバーを検討することは意味を持ち始める可能性があります。

最後に、Aleksandrの回答に対するコメントで、方程式の制約について言及しています。それが実際に重要な問題である場合、Rで制約付き最小二乗を計算する方法があります。私は個人的pcls()mgcvパッケージが好きです。おそらく、質問を編集して、直面する制約のタイプ(ボックス制約、非負性制約、積分制約、線形制約など)を含めるようにしますか?


1
ステファン、あなたの親切な言葉に感謝します!あなたのいい答えに賛成しました。質問の著者によるコメントに基づいて、私の回答に加えた更新に興味があるかもしれません。
Aleksandr Blekh 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.