在python中获得更精确的答案

时间:2012-09-13 17:41:45

标签: python numpy

我正在尝试用python实现一个简单的公式。在“RLSR”的情况下,有两种方法通过C = k ^ -1 * y计算系数“C”,其中k是核矩阵,y是目标值矢量。

第二种方法是使用核方法的特征值(w)和特征向量(v)并使用公式:

Sum(u(i)*<u(i),y> / w(i) ). 

检查结果的答案我正在检查是否y = kc!在第一种情况下它没关系,但后一种情况它没有。但问题是我的c矢量在两种方法看起来都一样。

输出 invers 算法:

[ 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]

秒(特征分解)算法输出:

[ 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

现在我不知道如何解决这个问题。我想也许有些如何通过做更精确的回答。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

要使用numpy解决 k c = y ,请使用numpy.linalg.solve

c = solve(k, y)

这使用的算法比您尝试的方法更强大。