問題タブ [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.

0 投票する
3 に答える
4916 参照

python - 非常に大きな数または非常に小さな数を使用する場合の scipy.optimize.fmin_slsqp の問題

非常に大きな数または非常に小さな数を使用した場合にのみ、fmin_slsqp (または scipy.optimize の他の何か) で問題が発生したことはありますか?

私は、グレースケール画像とマスクを取得し、ヒストグラムを生成し、複数のガウス分布をヒストグラムに適合させるために、いくつかの Python コードに取り組んでいます。コードを開発するために小さなサンプル画像を使用しました。いくつかの作業の後、コードは見事に機能しました。ただし、最初にヒストグラムを正規化してビン値 <<1 を生成するか、巨大な画像をヒストグラム化して数十万のビン値を生成すると、fmin_slsqp() が散発的に失敗し始めます。わずか 5 回の繰り返しで終了し、通常は最初に与えた推測をわずかに変更したバージョンを返し、終了モード 8 を返します。これは、「ラインサーチの正方向導関数」を意味します。最初にビン数のサイズを確認し、それらを約 100 ~ 1000 の範囲にスケーリングすると、fmin_slsqp() は通常どおり機能します。結果を返す前に、スケーリングを解除するだけです。

私は周りを見回して、基本的に微分を近似するために使用される dx であるイプシロン値について話している人々を見つけましたが、それは役に立ちませんでした。それ以外には、まだ有用なものは見つかりませんでした。どんなアイデアでも大歓迎です。前もって感謝します。

ジェームズ

0 投票する
8 に答える
71587 参照

c - Cの高速で効率的な最小二乗適合アルゴリズム?

時間と振幅の2つのデータ配列に線形最小二乗近似を実装しようとしています。私がこれまでに知っている唯一の手法は、(y = m * x + b)で可能なすべてのmポイントとbポイントをテストし、エラーが最小になるようにデータに最適な組み合わせを見つけることです。ただし、すべてをテストするため、非常に多くの組み合わせを繰り返すことは役に立たない場合があると思います。私が知らないプロセスをスピードアップするためのテクニックはありますか?ありがとう。

0 投票する
2 に答える
10678 参照

python - カイ二乗 numpy.polyfit (numpy)

誰かが numpy.polyfit を使用して Chi^2/doF を取得する方法を説明できますか?

0 投票する
1 に答える
1502 参照

matlab - MATLABでのfsolveの各反復の間に関数を実行します

私はfsolveMATLABのエネルギー関数を最小化するために使用しています。私が使用しているアルゴリズムは、グリッドをノイズの多い格子データに適合させますが、各データポイントからのグリッドの距離にコストがかかります。

目的関数は、ガウス・ニュートンアルゴリズムを使用できるように、二乗誤差項で定式化されます。ただし、プログラムはLevenberg-Marquardtに戻ります。

これはおそらく、コストに二乗誤差がある一方で、各データポイントに最も近いグリッド中心を選択する目的(コスト)関数のステージがあり、アルゴリズムが非二乗になるためであることに気付きました。

私がやりたいのは、コスト関数のJacobianの評価とは別に、最も近いグリッド中心のこの割り当ての更新を実行することです。これにより、ガウス・ニュートン法を使用できるようになり、アルゴリズムの速度が大幅に向上すると思います。

現在、私はこのようなことが起こっていると信じています:

代わりに私がしたいこと:

fsolveアルゴリズム全体を分解せずに、このような関数を反復に挿入する方法はありますか?fsolveを手動で編集した場合でも、ガウス-ニュートンアルゴリズムの性質により、この追加の手順を追加できますか?

ありがとう

0 投票する
3 に答える
6663 参照

python - scipy pythonでのleastsqフィットによる信頼区間

Pythonで最小二乗適合(scipy.optimize.leastsq)の信頼区間を計算するには?

0 投票する
2 に答える
1047 参照

matlab - MATLAB: 以前のバージョンから関数を実行する

編集:

@yoda と @morispaa に感謝します。あなたはどちらも正しく、@morispaaのソリューションは機能します。つまり、 Zがまたがる空間に関する仮定に基づく変換された係数の私の処理、およびZベクトルの順序「方向」は、更新すると正しい結果をレンダリングしますRの対角要素が正の要素を持つように、 Qの列の符号を変更します。

私が取り組んでいる変換の詳細については、こちらをお読みください。以下のZ = サンプリングされたゼルニケ多項式。これは、離散ケース (私たちのケース) で直交または完全ではないことが知られています。

@morispaa によって提案されたソリューションが機能する理由についての直感。それについてあなたの意見を聞きたいです:

私の直感では、Rの実数の非負の対角線を何らかの形で適用すると、基底QがZのベクトルと「一致する」ようになり(前に述べたように、ユニタリではありません)、したがって以下のオプション 1 と 2 が得られるということです。それらは異なる変換を表していますが、出力係数はおそらく同様の空間にあります。

より具体的には、Zは「ほぼ」ユニタリであり、これによりQR分解がZに十分近い基底を返すようになるのではないでしょうか? そうして初めて、 Zのベクトルの詳細に関する仮定に基づく変換された係数の処理が、 Qの対角が完全に正の場合は機能するが、負のエントリがある場合は機能しないと想像できます。どう思いますか?

バックグラウンド

MATLAB R2011aR2010bの両方がマシンにインストールされています。

R2010bからR2011aへの変更の 1 つは、の実装に影響しますqr()(この特定の変更に関するリリース ノートはこちらを参照してください)。

qr()私のプロジェクトが直接および逆変換の直交基底を推定するために使用するものの重要な部分。私のコードは、この変換を入力信号に適用し、変換された係数を処理して、処理された信号を返します。つまり、R2011aで行われた変更によりqr()、この変換の係数を処理するブロックが機能しなくなります (逆変換は、処理された信号の期待される逆変換を返しません)。

どういうわけか、現在返されているQマトリックスはqr()、変換された係数の処理が適切に機能しないという点で、古いバージョンとは異なります。

最初の質問

以上のことから、 R2010bからR2011aを使用するように指示することは可能ですか?qr()

2 番目の質問

QQ'を使用して、直接変換と逆変換を計算します。詳細はこちらでご覧いただけます。より具体的には、y = Q * xx = Q' * yを使用して、それぞれ直接変換と逆変換を計算します。直接変換を計算する別の方法は、最小二乗法を使用することです。つまり、次の 2 つのオプションがあります。

オプション 1: QR 因数分解を使用した直接および逆変換:

オプション 2: 最小二乗フィッティングによる直接変換と逆変換

変数は次のとおりです。

R2011a では、上記のオプション 1が機能しなくなりました ( R2010bでは機能します)。直接変換と逆変換に使用するというアイデアが本当に気に入っていqr()ます (すべての新しいベクトルの最小二乗を計算するよりもはるかに高速です)。私のプロジェクトに新しいものを使用したい場合、私の変換を新しいQqr()で再び機能させる方法を知っている人はいますか?

0 投票する
2 に答える
7079 参照

python - Pythonの疎行列の擬似逆行列

私は神経画像からのデータを扱っていますが、大量のデータがあるため、コードに疎行列 (scipy.sparse.lil_matrix または csr_matrix) を使用したいと考えています。

特に、最小二乗問題を解くには、行列の疑似逆行列を計算する必要があります。メソッド sparse.lsqr を見つけましたが、あまり効率的ではありません。Moore-Penrose の疑似逆行列を計算する方法はありますか (正規行列の pinv に対応)。

私の行列 A のサイズは約 600'000x2000 で、行列のすべての行に 0 から最大 4 つのゼロ以外の値があります。マトリックス A のサイズは、ボクセル x 繊維束 (白質繊維トラクト) によって与えられ、ボクセル内で交差する最大 4 つのトラクトが予想されます。ほとんどの白質ボクセルでは、少なくとも 1 つのトラクトがあると予想されますが、ラインの約 20% はゼロになる可能性があると言えます。

ベクトル b はスパースであってはなりません。実際には、b には各ボクセルの測定値が含まれており、これは一般にゼロではありません。

エラーを最小限に抑える必要がありますが、ベクトル x にはいくつかの条件もあります。より小さな行列でモデルを試したので、これらの条件を満たすためにシステムを制約する必要はありませんでした (一般に 0

それは何かの助けになりますか?A の疑似逆を避ける方法はありますか?

ありがとう

6 月 1 日更新: ご協力ありがとうございます。私のデータについては何もお見せできません。なぜなら、Python のコードがいくつかの問題を引き起こしているからです。ただし、適切な k を選択する方法を理解するために、Matlab でテスト関数を作成しようとしました。

コードは次のとおりです。

F のサイズと比較して、k はどうあるべきか、何か考えはありますか? 私は 250 (1000 以上) を取得しましたが、結果は満足のいくものではありません (待ち時間は許容範囲内ですが、短くはありません)。また、結果を既知の解と比較できるようになりましたが、一般的に k を選択するにはどうすればよいでしょうか? また、取得した 250 個の単一値のプロットと、それらの二乗を正規化したものも添付しました。matlabでスクリプロットをより適切に行う方法が正確にはわかりません。私は今、より大きな k を使用して、突然値がはるかに小さくなるかどうかを確認しています。

ありがとう、ジェニファー

画像は、計算された 250 を示しています。 Matlab でスクリー プロットを作成する方法が正確にはわかりません。 二乗正規化単一値

0 投票する
1 に答える
1101 参照

matlab - MATLAB の lsqnonlin でのユーザー定義のヤコビアン

MATLAB のlsqnonlin関数を使用する場合、ドキュメントに記載されているように、ユーザー定義のヤコビ行列を指定しようとしています。

lsqnonlin で使用される目的関数の出力は、非二乗値のベクトルである必要があります。これを二乗して合計すると、エネルギーが得られます。しかし、ヤコビアンは二乗値または非二乗値の偏微分である必要がありますか?

0 投票する
4 に答える
1994 参照

python - numpy:より多くの観測値で最小二乗法を更新するコード

numpyより多くの観測値で近似を更新できる、通常の最小二乗のベースの実装を探しています。AppliedStatisticsアルゴリズムAS274またはRのラインに沿った何かbiglm

それができない場合は、QR分解を新しい行で更新するためのルーチンも重要になります。

ポインタはありますか?

0 投票する
2 に答える
9104 参照

java - 多重回帰

同じ変数の 3 つの異なる推定量を組み合わせるには、Java で重回帰法を実装する必要があります (したがって、3 つの独立変数と 1 つの従属変数)。単純な方法を探しています(重回帰法と同じくらい単純です)。私が行った検索から、最小二乗法がおそらく適切なアプローチであると思いますが、他の方法を提案するかどうかを知りたいです。また、多変数コンテキストでの最小二乗法の実装に関する適切なドキュメントを見つけることができなかったので、使用できる適切な情報/ソースを教えていただければ幸いです。