問題タブ [least-squares]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - 線形または非線形最小二乗近似を行うためのRubyライブラリ?
データセットの線形または非線形最小二乗近似を実行できるRubyライブラリはありますか?
私がやりたいことは次のとおりです。
- 一連の[x、y]データポイントが与えられた
- そのデータに対して線形または非線形の最小二乗近似を生成します
- ライブラリは、線形近似または非線形近似のどちらを実行する必要があるかを判断する必要はありません。ライブラリの呼び出し元は、必要な回帰のタイプを知っている必要があります
この機能を取得するためにC/C ++ / Javaライブラリを移植する必要がないようにしたいので、使用できる既存のRubyライブラリがあることを期待しています。
algorithm - 応答行列の各列で最小だが高速な線形回帰を計算する方法は?
"lm" を使用せずに R で通常の最小二乗 ( OLS ) 推定値を計算したいのですが、これにはいくつかの理由があります。まず、「lm」は、私の場合はデータ サイズが問題であることを考慮して、必要のない多くのもの (適合値など) も計算します。第二に、OLS を別の言語で実装する前に R で自分自身を実装できるようにしたい (たとえば C で GSL を使用する)。
ご存知かもしれませんが、モデルは次のとおりです。Y=Xb+E; E〜N(0、シグマ^ 2)で。以下で詳しく説明するように、b は平均 (b0) と別の係数 (b1) の 2 つのパラメーターを持つベクトルです。最後に、実行する線形回帰ごとに、b1 (効果サイズ) の推定値、その標準誤差、sigma^2 (残差分散)、および R^2 (決定係数) の推定値が必要です。
これが私のデータです。N 個のサンプルがあります (例: 個人、N~=100)。サンプルごとに、Y 出力 (応答変数、Y~=10^3) と X ポイント (説明変数、X~=10^6) があります。Y出力を別々に扱いたい、つまり. Y 線形回帰を開始したい: 出力 1 用に 1 つ、出力 2 用に 1 つなど。それから...最終的にポイントXに。
これは、 「lm」の速度と、行列代数を介した OLS 推定の計算速度をチェックするための私のR コードです。
まず、ダミー データをシミュレートします。
すぐ下で使用される私自身の関数は次のとおりです。
組み込みの「lm」を使用したコードは次のとおりです。
これが私のカスタム OLS コードです。
上記の値でこの例を実行すると、次のようになります。
(そして、当然、N、X、Y を増やすと悪化します。)
もちろん、"lm" には応答行列 (y~xi) の各列を個別に "自動的に" フィッティングするという優れた特性がありますが、Y 回 (yi~xi ごとに) "適用" する必要があります。しかし、これが私のコードが遅い唯一の理由ですか? これを改善する方法を知っている人はいますか?
(非常に長い質問で申し訳ありませんが、最小限でありながら包括的な例を提供しようとしました。)
r - 加重最小二乗推定の関数
Rには加重最小二乗関数がありますか?具体的には、切片と傾きを計算するものを探しています。
データセット
- 1 3 5 7 9 11 14 17 19 25 29
- 17 31 19 27 31 62 58 35 29 21 18
- 102153 104123 96564 125565 132255 115454 114555 132255 129564 126455 124578
従属変数はデータセット3であり、データセット1と2は独立変数です。
c - C 用非線形最小二乗最適化ライブラリ
目的関数 (Levenberg-Marquardt アルゴリズムが望ましい) の最適化を行い、ボックス制約、線形不等式制約、および非線形不等式制約をサポートする C のライブラリを探しています。
すでにいくつかのライブラリを試しましたが、アプリケーションに必要な制約タイプを採用しているライブラリはありません。
私は現在NLoptを調査していますが、提供されているアルゴリズムのいずれかで最小二乗法を達成できるかどうかはわかりません。
この問題の全範囲の制約をサポートする単一のライブラリがないとは信じがたいので、グーグル検索中にどこかで間違いを犯したと思います。
私は最近、C から Matlab 関数を呼び出すことができることを発見しました。これで問題は非常に簡単に解決されますが、C から Matlab 関数を呼び出す必要はありません。私の経験では高速ではありません。
どんな助けでも大歓迎です。
math - 最小二乗法は期待どおりに機能しませんか?
最小二乗法を行うことで、三辺測量の精度を向上させようとしました。初期推定では、クラスター ポイントの平均値を取得します。この値は、次の推定までの距離が十分に小さくなるまで増加します。増分値は、次の式を使用して計算されます。
私の質問は、ほとんどの場合、最終的な答えが本来あるべきものから非常に重要な点をそらすのはなぜですか? それほど正確ではありませんが、最初の見積もりはさらに優れています。ここで何かが恋しいですか?
編集
式はここで説明した通りです。この写真の方が分かりやすいと思いますが、
最終点が交差領域の外側にあることも確認してください。
matlab - 過剰決定制約システムの解決
私はn
実数変数を持っています(わからない、本当に気にしないでください)、それらを呼びましょうX[n]
。私はm >> n
それらの間に関係もあります。それらR[m]
を次の形式で呼びましょう。
X[i] = alpha*X[j]
は、alpha
ゼロ以外の正の実数でi
ありj
、別個のものですが、(i, j)
ペアは必ずしも一意ではありません(つまり、異なるアルファ係数を持つ同じ変数間に2つの関係が存在する可能性があります)
私がやろうとしているのは、alpha
最小二乗の意味で過剰決定系を解決する一連のパラメーターを見つけることです。理想的な解決策は、各方程式パラメーターとその選択された値の間の差の2乗和を最小化することですが、次の近似に満足しています。
m個の方程式をn個の未知数の過剰決定系に変換すると、疑似逆行列ベースの数値ソルバーは明白な解(すべてゼロ)を与えます。したがって、現在私が行っているのは、別の方程式をミックスに追加しx[0] = 1
(実際には任意の定数で可能です)、ムーア・ペンローズ疑似逆行列を使用して、生成されたシステムを最小二乗の意味で解きます。(x[0] - 1)^2
これはの合計との二乗和を最小化しようとしx[i] - alpha*x[j]
ますが、これは私の問題に対する適切で数値的に安定した近似であることがわかります。次に例を示します。
オクターブ:
これにより、、、の値が得られます。これによりa
、
次の(合理的な)関係が得られます。b
c
[0.99383; 0.51235; 0.19136]
したがって、今はこれをC / C ++ / Javaで実装する必要があり、次の質問があります。
問題を解決するためのより高速な方法はありますか、それとも過剰決定系を生成して疑似逆行列を計算することで正しい方向に進んでいますか?
私の現在のソリューションでは、特異値分解と3つの行列乗算が必要です。これは、5000または10000になる可能性があることを少し考慮していm
ます。疑似逆行列を計算するより高速な方法はありますか(実際には、最初の列のみが必要であり、行列のスパース性を考慮して、Bがゼロである場合の行列全体(最初の行を除く)(各行にはゼロ以外の値が2つ含まれ、一方は常に1で、もう一方は常に負です)
このためにどの数学ライブラリを使用することをお勧めしますか?LAPACKは大丈夫ですか?
数値的に安定していて漸近的に高速であるという条件で、他の提案も受け入れます(たとえばk*n^2
、k
大きくなる可能性があります)。
r - R スクリプト - 以下の最小二乗法
重複の可能性:
Rで2つの線形フィットが交差する場所を見つける
グラフ上のいくつかのポイント (通常は約 6 または 7 ポイントのみ) が与えられた場合、ソリューションが次の要素で構成される最適なソリューションを見つける必要があります。
- 2 本の直線
- 線は交差する必要があります
- 交点 (x ポイント) は、指定した 2 つの値 (xLow と xHigh など) の間にある必要があります。
nls (またはそれ以上の何か) を使用してこれを行うにはどうすればよいですか?
最適なものが複数ある場合は、どれでもかまいません。基本的に、2 つの線は V を形成します。
r - R スクリプト - nls 関数
Rのnls関数でパラメーター「アルゴリズム」が何をするかについて、誰かが私に良い説明を与えることができますか?
また、式はどのように機能しますか?チルダを使用していることは知っていますが、現実的な説明を実際に見つけることができません。
また、開始値はどのくらい重要ですか? 複数の開始値を試す必要がありますか? または、使用する開始値に関係なく、nls が正しいパラメーターを見つけることを保証できますか?
r - Rスクリプト-NLSが機能しない
5つの(x、y)データポイントがあり、ポイント(x0、y0)で交差し、次の方程式に従う2本の線で構成される最適なソリューションを見つけようとしています。
具体的には、x=2とx=3の間で交差が発生する必要があります。コードを見てください:
したがって、そこにリストされているデータポイントを確認できます。次に、nlsを実行し、パラメーター、、、(m1
勾配、および交点)を取得します。m2
x0
y0
しかし、解決策を見てください:
明らかに、赤い線(最初の2つのポイントのみに基づいていると想定されています)は、最初の2つのポイントに最適な線ではありません。これは、最後の3つのポイントに依存するはずの青い線(2番目のフィット)の場合と同じです。ここで何が問題になっていますか?
math - 楕円体を3Dデータポイントに適合させる
楕円体にフィットさせたい3Dデータポイントの大規模なセットがあります。
私の数学はかなり貧弱なので、数学ライブラリなしで最小二乗法を実装するのに問題があります。
プロジェクトに直接プラグインできるデータに楕円体を適合させることができるコードを知っているか、持っている人はいますか?Cでの使用が最適ですが、C ++、Java、C#、Pythonなどから変換しても問題ありません。
編集:センターを見つけることができることも大きな助けになるでしょう。ポイントは等間隔ではないため、平均をとっても中心にはなりません。