我正在尝试用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 。
现在我不知道如何解决这个问题。我想也许有些如何通过做更精确的回答。
感谢任何帮助!
答案 0 :(得分:0)
要使用numpy解决 k c = y ,请使用numpy.linalg.solve
:
c = solve(k, y)
这使用的算法比您尝试的方法更强大。