2012-03-07 9 views
0

私が理解しようとしている問題は簡単ですが、私はできませんmatlabで正しい結果を得るようです。実際の問題は、平方距離だけを関数として使用して2つの隠れ層入力RBFのウェイトベクトルを取得したい、つまりベイジアンまたはガウス関数が私のφでないことです。 2つの中心を持つ関数を使用して、0,0と1,1としましょう。これは私に行列のφを与えます:RBFと疑似逆XOR

[0 sqrt(2); 1 1; 1 1; sqrt(2)0] * [w1; w2] = [0; 1; 1; 0]私のXOR関数を定義しました。

matlab * [0; 1; 1; 0]でΦの疑似逆行列を適用すると、私は[0.33; 0.33]これは正しい出力値[0; 1; 1; 0]を得るための正しい値ではありません。

つまり.33 * sqrt(2)!= 0。

誰かが私にこのような理由を説明することはできますか?

答えて

0

私はこれを取り上げます。行列は、Aと呼びますが、A = [0 sqrt(2) ; 1 1; 1 1; sqrt(2) 0]は完全な列のランクを持ちますが、完全な行のランクはありません。つまり、rank(A) = 2です。次に、システムAx = bを解決します。ここでは、xがあなたの重みベクトルです。 Matlabでx = A\bを実行することもできます。これははるかに正確な答えです。私はあなたと同じ答えを得る。これは非常におおまかな説明です。特定の解ベクトルに対してシステムを解くことができない場合は、Ax = bで解決できるベクトルxが存在しないことを意味します。 Matlabがしているのはと推定され、の可能な限り近い答えです。

minimize norm(A*x-b) 

Aが列よりも大きな行をもち、フルランクでない場合は、過多最小二乗問題をん:あなたはMatlabのを見れば、私はそれが言う助ける、あなたがpinvを使用推測していますユニークな解決策はありません。無限に多くのソリューションの二つだから

x = pinv(A)*b 

y = A\b 

あり、これはあなたの問題のように見えます。可能であれば、より強固なシステムを考え出すためにφ行列を調べることをお勧めします。これが役に立つと願っています。

+0

本当に役に立ちました。よくやった。 – Martinos