[Solved] Jensen-Bregman LogDet divergence [closed]

As I understand it the function (of two symmetric positive definite matrices) is

JL(X,Y) = log( det( (X+Y)/2)) - log( det( X*Y))/2
        = log( det( (X+Y)/2)) - (log(det(X)) + log(det(Y)))/2

I reckon the way to do this is to compute the cholesky factorisations of X, Y and (X+Y)/2, that is find lower triangular matrices L,M,N so that

X = L*L'
Y = M*M'
(X+Y)/2 = N*N'

(I’m sorry to say I don’t know matlab, but there is bound to be a function to compute the cholesky factorisation).

and then, using the properties of determinants and logs we have

JL(X,Y) = 2*log( det(N)) - log( det(L)) - log(det(M)))

For a lower triangular matrix K we have

log( det( K)) = log ( Prod( K[i,i], i=1..n))
              = Sum ( log( K[i,i]), i=1..n))

I think it might be better to use the second form, even though it is slower, as there could be a risk of underflow in the product if the matrices are large, and perhaps the best thing to do would be to compute

JL(X,Y) = Sum ( 2*log( N[i,i]) - log( L[i,i]) - log( M[i,i]), i=1..n)
        = Sum( log( N[i,i]*N[i,i] / (L[i,i]*M[i,i])), i=1..n)

Note that all of this assumes that the cholesky factorisations can be computed, i.e. that the matrices X and Y are strictly positive definite, but then the function JL is only defined in that case.

solved Jensen-Bregman LogDet divergence [closed]