python で簡単な数式を実装しようとしています。「RLSR」の場合、C=k^-1*y によって係数「C」を計算する 2 つのアプローチがあります。ここで、k はカーネル行列、y はターゲット値ベクトルです。
2 番目の方法は、カーネル メソッドの eigenvalues(w) と eigenvectors(v) を使用し、次の式を使用することです。
Sum(u(i)*<u(i),y> / w(i) ).
結果の答えを確認するために y=kc かどうかを確認しています! 最初のケースでは問題ありませんが、後者の場合はそうではありません。しかし問題は、両方の方法で私の c ベクトルが同じように見えることです。
逆アルゴリズムからの出力:
[ 19.49840251 18.82695226 20.08390355 15.01043404 14.79353281
16.75316736 12.88504257 16.92127176 16.77292954 17.81827473
20.90503787 17.09359467 18.76366701 18.14816903 20.03491117
22.56668264 21.45176136 25.44051036 30.40312692 22.61466379
22.86480382 19.34631818 17.0169598 19.85244414 16.63702471
20.35280156 20.58093488 22.42058736 20.54935198 19.35541575
20.39006958 19.74766081 20.41781019 22.33858797 17.57962283
22.61915219 22.54823733 24.96292824 22.82888425 34.18952603
20.7487537 24.82019935 22.40621769 21.15767304 27.58919263
18.39293156 21.55455108 18.69532341]
2 番目の (固有分解)アルゴリズムからの出力:
[ 19.25280289 18.73927731 19.77184991 14.7650427 14.87364331
16.2273648 12.29183797 16.52024239 16.66669961 17.59282615
20.83059115 17.02815857 18.3635798 18.16931845 20.50528549
22.67690164 21.40479524 25.54544 30.94618128 22.72992565
23.06289609 17.6485592 15.2758427 19.50578691 16.45571607
20.19960765 20.35352859 22.60091638 20.36586912 18.90760728
20.57141151 19.43677153 20.43437031 22.39310576 17.72296978
22.82139991 22.50744791 25.10496617 22.30462867 34.80540213
20.77064617 25.18071618 22.5500315 20.71481252 27.91939784
18.29868659 22.00800019 18.71266093]
これは私がどのように実装したかです: 48 個のサンプルがある場合、K のサイズは 48x48 、y は 48x1 です。
def cpu_compute(y,k):
w, u=LA.eigh(k)
uDoty=np.dot(u,y)
temp=np.transpose(np.tile(w,(len(u),1)))
div=np.divide(u,temp)
r=np.tile(uDoty,(len(div),1))
a=div*r.T
c=sum(a)
return c
からの結果
print np.allclose(Y,np.dot(K,c))
は偽です。
また、真の結果との差のノルムは3.13014997999です。
どうすればこれを修正できるかわかりません。もっと正確な答えをすることで、どうにかできるのではないかと思いました。
どんな助けにも感謝します!