我正在尝试用 python 实现一个简单的公式。在“RLSR”的情况下,有两种方法可以通过 C=k^-1*y 计算系数“C”,其中 k 是内核矩阵,y 是目标值向量。
第二种方法是使用核方法的特征值(w)和特征向量(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]
第二(特征分解)算法的输出:
[ 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。
现在我不知道如何解决这个问题。我想也许可以通过更准确的答案来做一些事情。
感谢任何帮助!