7

私はスタックオーバーフローを検索しましたが、実際に複数の独立変数を持っている人はいないため、私のものと本当に同じ質問は見つかりませんでした。基本的に、データポイントの配列があり、それらのデータポイントの回帰式を見つけたいと思っています。これまでのコードは次のようになります: (w、x、z は独立変数で、y は従属変数です)

var dataPoints = [{
 "w" : 1, "x" : 2, "z" : 1, "y" : 7
}, {
 "w" : 2, "x" : 1, "z" : 4, "y" : 5
}, {
 "w" : 1, "x" : 5, "z" : 3, "y" : 2
}, {
 "w" : 4, "x" : 3, "z" : 5, "y" : 15
}];

次のような数式オブジェクトを返す関数が必要です。

var regressionEquation = [{
 "var" : "w", "power" : 1, "coeff" : "1.5"
}, {
 "var" : "x", "power" : 1, "coeff" : "2"
}, {
 "var" : "z", "power" : 1, "coeff" : "1"
}];

ループを使用せずに、このような回帰式を考え出す方法はありますか? 1 より大きい累乗の回帰式を求める方法はありますか? 前もって感謝します。

編集

多くの人が、べき乗を差し込んで作成された連立方程式を解くことを提案しています。これに関する問題は、連立方程式を解くのに十分な数のデータ ポイントがある場合です。質問の例では、人々が提案している連立方程式を解くために 3 つの変数があります。3 つのデータポイントが必要ですが、4 つ持っています。複数の解があるため、これは問題につながります。4 つの方程式を 3 つの異なるグループに結合する方法が 4 通りあるため、4 つの解が考えられます。これにより、4 つの点すべてに最適な答えが得られず、4 つの答えが残ることになります。

4

3 に答える 3

1

あなたが述べた問題は、変換の下では、線形回帰の問題と同等です。k_1指数、k_2、およびを修正したとコメントで述べましたk_3。変換はタプル{w, x, z ,y}をタプルに取ります{w^k_1, x^k_2, z^k_2, y} = {w', x', z' ,y}。プライミングされた変数に対して線形回帰を使用して、係数を取得します。

たとえば、k_1 = 2k_2 = 3、およびの場合k_3 = 1、変換の 1 つの例を次に示します。

{"w" : 4, "x" : 3, "z" : 5, "y" : 15} 
==> {"w*" : 16, "x*" : 27, "z*" : 5, "y" : 15}

これは、多項式回帰問題を線形回帰問題に変換する方法の特殊なケースにすぎません。あなたの場合、検討している多項式の形式は特に単純です。

線形回帰の問題を解決するには、好きな JavaScript ライブラリを使用してください。それらの数があります。

于 2012-11-22T01:55:18.693 に答える
1

方程式が 4 つあり、変数が 3 つしかない場合 (既にベキが決まっているので、プラグインして線形方程式にします)、線形方程式は完成しすぎており、正確な答えは存在しません。 4 つの方程式すべてを満たします。

できることは、残差を最小限に抑えて最適な近似を取得することです。

wx と z の係数 ab と c があるとします。

マトリックスを定義する

M=[w1,x1,z1;w2,x2,z2;w3,x3,z3;w4,x4,z4]. 

ベクトルを定義します

v=[a;b;c], 

ベクトルを定義

r=[y1;y2;y3;y4]. 

それから問題は

M*v=r solve v. 

1.ランク(M)>変数数の場合、残差を最小化する必要があります

||M*v-r||_2. 

これは凸なので、微分してゼロにします。

M^T*M*v-M^T*r=0 => v=(M^T*M)\M^T*r. 

(M^T*M)\M^T は M の MP 逆数です。ランク(M)>変数の数の場合、(M^T*M) は逆数です。

2.ランク(M)<=変数数の場合、方程式の正確な解が無限に得られます。

M*v=r. 

M の特異値分解を次のようにします。

M=U*S*V^T, 

それから

v=V*S^-1*U^T*r 

解決策の一つです。

V*S^-1*U^T は M の疑似逆数です。

線形代数ライブラリを使用すると、反復せずに閉形式のソリューションを簡単に取得できます。http://sylvester.jcoglan.com/

于 2012-11-25T06:29:22.340 に答える
0

線形方程式を得るために最小二乗法を使用することをお勧めします。さらに、近似する関数が事前にわかっている場合は、非線形最小二乗法を使用できます。

(http://en.wikipedia.org/wiki/Least_squares)

JavaScript の線形 LS のリンクがいくつかあり、おそらくこれらを 3 次元に適合させることができます (たとえば、Google のクイック検索からhttp://dracoblue.net/dev/linear-least-squares-in-javascript/159/を参照)。ただし、非線形の場合は、さらに作業が必要になります。

于 2012-11-25T11:10:35.077 に答える