线性方程和内积的最小范数解

时间:2019-06-17 07:29:39

标签: python-3.x machine-learning

这是我第一次在这里发布问题。我想了解有关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列中的内积。在这里是否正确?预先感谢您提供的任何帮助。

0 个答案:

没有答案