svdbip - SVD for bipartitioned matrix
SVD for a matrix x partitioned by rows (K) and by columns (H).
For example x is a matrix pq. K=[p1,p2],k=1,2 and H=[q1,q2,q3], h=1,2,3 are the 2 vectors which defines the partition of x into 6 blocks:
p=p1+p2, q=q1+q2+q3,
so that
x= [x11 x12 x13] [x21 x22 x23]
is the concatenated of 6 matrices, with 2 row blocks and 3 column blocks.
When K=p (or H=q), svdcp function is faster.
When H=q and K=p, it is the usual svd (criterion then contains squared singular values of x).
The first solution calculates 5 normed vectors: 2 uk of Rpk,k=1,2, associated to the 3 vh of Rqh, h=1,2,3. with the optimized criterion: sumk sumh [(uk'*xkh*vh)^2]. (uk'*xkh*vh)^2 measures the partial link between the rows and the columns of the block xkh.
The second solution is obtained as the first, but after replacing each xkh by xkh-uk*uk'*xkh-xkh*vh*vh'+uk*uk'*xkh*vh*vh'. And so on for the successive solutions 1,2,...,r . The higher number of solutions is r=inf(p1,p2,q1,q2,q3), when the xkh's are supposed with full rank. So rmax=min([min(K),min(H)]) then is possible; The result matrices u and v have r columns.
u(1:p1,:)'*u(1:p1,:)=u(p1+1:p,:)'*u(p1+1:p,:)= v(1:q1,:)'*v(1:q1,:)= =v(q1+1:q1+q2,:)'*v(q1+1:q1+q2,:)=v(q1+q2+1:q,:)'*v(q1+q2+1:q,:)=Ir
criterion then is an array 2 x 3 x r
Convergence of algorithm is not global. So the below proposed initialisation of the algorithm may be not very convenient for some data sets. Several different random initialisations with normed vectors might be considered; the best result then is choosen.
x=random('unif',0,1,10,20); [u1,v1,cri1]=svdbip(x,[4,6],[3,7,10],3); u1(1:4,:)'*u1(1:4,:),v1(11:20,:)'*v1(11:20,:) cri1 [u2,v2,cri2]=svdbip(x,10,[3,7,10],3); [u1,v1,cri1]=svdcp(x,[3,7,10],3);cri1,cri2
Kissita G., Cazes P., Hanafi M. & Lafosse (2004). Revue de Statistique Appliquee. hanafi@enitiaa-nantes.fr Roger.Lafosse@lsp.ups-tlse.fr cazes@ceremade.dauphine.fr gakissita@yahoo.fr