Ejemplo n.º 1
0
def barycenter_alpha(means, kerns, T, xi):
    """ The barycenter function used for optimization"""

    def sig(x): return 1 / (1 + np.exp(-1 * x))

    n = kerns[0].shape[0]

    for i in range(len(kerns)):
        kerns[i] = np.reshape(kerns[i], (n, n))

    # Calculate the barycenter mean
    # mm = lambda dist: np.mean(dist, x)
    # mbar = sum([sig(xi)*means[i] for i in range(len(means))]) # just two dists for now
    # mbar = sig(xi)*means[0] + (1-sig(xi))*means[1]
    mbar = 0

    # Calculate the barycenter covariance matrix`
    # Kbar = np.matmul(np.random.rand(means[1].shape[0], means[1].shape[0]), np.random.rand(means[1].shape[0], means[1].shape[0]))
    # Kbar = sum([xi[i] * kerns[i] for i in range(len(kerns))]) # Initialize Kbar to be the euclidean average
    Kbar = sig(xi) * kerns[0] + (1-sig(xi)) * kerns[1] # Initialize Kbar to be the euclidean average
    # print("KBAR:", Kbar)
    update = lambda kern, Kbar2, x_i: x_i * ss.sqrtm(np.matmul(np.matmul(Kbar2, kern), Kbar2))

    for t in range(1, T):
        Kbar2 = ss.sqrtm(Kbar)
        Kbarnew = update(kerns[0], Kbar2, sig(xi)) + update(kerns[1], Kbar2, (1-sig(xi)))
        # print("t, NAN IN SQRT, diff: ", t, np.isnan(Kbar2).any(), np.mean(np.abs(Kbarnew - Kbar)))
        Kbar = Kbarnew

    return mbar, Kbar
Ejemplo n.º 2
0
 def sample(var_param, n_samples, seed=None):
     my_rs = rs if seed is None else npr.RandomState(seed)
     s = np.sqrt(my_rs.chisquare(df, n_samples) / df)
     param_dict = ms_pattern.fold(var_param)
     z = my_rs.randn(n_samples, dim)
     sqrtSigma = sqrtm(param_dict['Sigma'])
     return param_dict['mu'] + np.dot(z, sqrtSigma)/s[:,np.newaxis]
Ejemplo n.º 3
0
 def fun(A):
     return to_scalar(spla.sqrtm(A))
Ejemplo n.º 4
0
 def fun(A):
     return to_scalar(spla.sqrtm(A))