这是我第一次在这里发布问题。我想了解有关L1-KPCA算法的一些细节。 https://reader.elsevier.com/reader/sd/pii/S0031320312002877?token=0AAA357BE4D5B95D98C9707EF5904C9F3B6BF2AACDC2D18977345FB788D9FC61BB1DF76C6AE73C476BC9551E6774D4F1 enter image description here
有关下层算法的代码如下所示。
import numpy as np
def L1KPCA(K,a0):
N=np.shape(K)[0]
# Initialization (Step I)
a0=a0/np.sqrt((a0.T.dot(K)).dot(a0))
flag=1
iteration=0
p=np.zeros((1,N))
ep=1e-6
while flag==1:
iteration=iteration+1
## Step 2
a0_K=a0.T.dot(K)
p=np.where(a0_K<0,-1,1)
## Step 3
columnsum=np.zeros((N,1))
for i in range(N):
columnsum=columnsum+p[i]*K[:,i]
##---------question here---------------
U,D,V=nop.linalg.svd(K,full_matrices=False)
ita=(V.dot(linalg.pinv(np.diag(D))).dot(U.T)).dot(columnsum)
a=a/np.sqrt((ita.T.dot(K)).dot(ita))
## Step 4
if np.sqrt((a-a0).T.dot(a-a0))>ep:
a0=a
##---------question here---------------
## want to check zero results yield by inner product
elif a.T.dot(K)==0:
da=np.random.rand(N,1)*ep
a0=(a+da)/np.sqrt((a+da).T.dot(a+da))
flag=1
else:
flag=0
http://www.sci.utah.edu/~gerig/CS6640-F2012/Materials/pseudoinverse-cis61009sl10.pdf
我的问题在步骤3和4中。 在第3步中,要找到\ ita的最小范数解,我在这里使用svd。这是对的吗?是否可以在此处使用np.linalg.pinv(K)。
在第4步中,我编写a.T.dot(K)== 0来检查K的N列中的内积。在这里是否正确?预先感谢您提供的任何帮助。