1

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です。

どうすればこれを修正できるかわかりません。もっと正確な答えをすることで、どうにかできるのではないかと思いました。

どんな助けにも感謝します!

4

1 に答える 1

0

kc = yを numpy で解くには、次を使用しnumpy.linalg.solveます。

c = solve(k, y)

これは、試している方法よりもはるかに堅牢なアルゴリズムを使用します。

于 2012-09-14T01:22:08.177 に答える