Ejemplo n.º 1
0
def varying_view_number(N=100,runs=1):
    """\
    Multiview-MDS experiment with varying number of views
    """
    view_number = range(1,11)
    
    print('*** test.varying_view_number() ***')
    print(f'  N : {N}')
    print()

    X = misc.disk(N,dim=3)
    persp = perspective.Persp(dimX=3,dimY=2,family='linear',
                            restriction='orthogonal')
    cost = []
    for i in view_number:
        persp.fix_Q(number=i,random='orthogonal')
        Y = persp.compute_Y(X)
        D = distances.compute(Y)
        mv = multiview.Multiview(D,persp=persp)
        mv.setup_visualization(visualization='mds')
        mv.initialize_X(number=runs)
        mv.optimize_X(algorithm='agd')
        cost.append(mv.ncost)
        print(f'  {i:>2} : {mv.ncost:0.2e}')
    print()
Ejemplo n.º 2
0
def mds_comparison():
    max_iters = 100
    save_frequency = 10
    
    import misc, distances, mds
    print('\n*** gd.mds_comparison() ***\n')
    
    Y = misc.disk(30,2)
    plt.figure()
    plt.plot(Y[:,0],Y[:,1],'o')
    plt.title('Original data')
    plt.draw()
    plt.pause(0.1)
    
    D = distances.compute(Y)
    
    vis = mds.MDS(D,dim=2,verbose=1)
    vis.initialize_Y()
    vis.optimize(algorithm='gd',max_iters=max_iters,save_cost=True,
                 learning_rate=0.01,from_scratch=True,
                 save_frequency=save_frequency,label='mds, lr=0.01',verbose=2)
    vis.optimize(algorithm='gd',max_iters=max_iters,save_cost=True,
                 learning_rate=0.1,from_scratch=True,
                 save_frequency=save_frequency,label='mds, lr=0.05',verbose=2)
    vis.optimize(algorithm='agd',max_iters=max_iters,save_cost=True,
                 from_scratch=True,save_frequency=save_frequency,verbose=2)

    plt.show()
Ejemplo n.º 3
0
def agd_multiview_mds_standard(N=100,trials=3,runs=5):
    """\
    Test convergence of adaptive gradient descent for multiview MDS with
    standard projections, by solving a single multiview MDS problem using
    multiple initial parameters.
    """
    print('*** test.agd_multiview_mds_standard() ***')
    print(f'  N : {N}')
    print()

    for i in range(trials):
        print(f'  Trial # {i}')
        print('  Normalized cost :')
        X = misc.disk(N,dim=3)
        persp = perspective.Persp()
        persp.fix_Q(special='standard')
        Y = persp.compute_Y(X)
        D = distances.compute(Y)
        mv = multiview.Multiview(D,persp=persp)
        mv.setup_visualization(visualization='mds')
        stress = []
        for run in range(runs):
            mv.initialize_X()
            mv.optimize_X(algorithm='agd')
            stress.append(mv.ncost)
            print(f'  {mv.ncost:0.2e}')
        print()
Ejemplo n.º 4
0
def disk_compare(N=100,dim=2): ###
    print('\n***mds.disk_compare()***')
    
    X = misc.disk(N,2); labels = misc.labels(X)
    
    plt.figure()
    plt.scatter(X[:,0],X[:,1],c=labels)
    plt.title('original data')
    plt.draw()
    plt.pause(0.1)
    
    D = distances.compute(X)
    
    mds = MDS(D,dim=dim,verbose=1,title='disk experiments',labels=labels)
    mds.initialize()
    mds.figureX(title='initial embedding')

    title = 'full gradient & agd'
    mds.optimize(algorithm='agd',verbose=2,label=title)
    mds.figureX(title=title)
    mds.figureH(title=title)

    mds.forget()
    title = 'approx gradient & gd'
    mds.approximate(algorithm='gd',verbose=2,label=title)
    mds.figureX(title=title)
    mds.figureH(title=title)

    mds.forget()
    title = 'combine'
    mds.approximate(algorithm='gd',verbose=2,label=title)
    mds.optimize(verbose=2,label=title,max_iters=10)
    mds.figureX(title=title)
    mds.figureH(title=title)
    plt.show()
Ejemplo n.º 5
0
def example_approx(N=30, dim=2, batch_number=5):
    print('\n***mds.example_disk_batch()***\n')

    Y = misc.disk(N, dim)
    labels = misc.labels(Y)

    plt.figure()
    plt.scatter(Y[:, 0], Y[:, 1], c=labels)
    plt.title('Original data')
    plt.draw()
    plt.pause(0.1)

    D = distances.compute(Y)

    title = 'basic disk example using approximate gradient'
    mds = MDS(D, dim=dim, verbose=1, title=title, labels=labels)
    mds.initialize()
    mds.approximate(verbose=2,
                    max_iters=200,
                    lr=0.1,
                    batch_number=batch_number,
                    algorithm='gd')
    mds.figureX(title='Final embedding')
    mds.figureH()
    plt.show()
Ejemplo n.º 6
0
def compare_multiview_same(N=100,runs=1):
    noise_levels = [0.0001,0.001,0.01,0.1,0.5]
    stress = []
    X = misc.disk(N,dim=2)
    persp = perspective.Persp(dimX=2,dimY=2)
    #persp.fix_Q(random='orthogonal',number=3)
    persp.fix_Q(special='identity',number=3)
    Y = persp.compute_Y(X)
    D = distances.compute(Y)

    persp1 = perspective.Persp(dimX=3,dimY=2)
    persp1.fix_Q(special='standard',number=3)
    persp2 = perspective.Persp(dimX=2,dimY=2)
    persp2.fix_Q(special='identity',number=3)
    persp3 = perspective.Persp(dimX=3,dimY=3)
    persp3.fix_Q(special='identity',number=3)

    cost = []; cost2 = []; cost3 = []; costm = []
    for noise in noise_levels:
        D_noisy = distances.add_noise(D,noise)
        
        mv = Multiview(D_noisy,persp=persp1,verbose=1)
        mv.setup_visualization(visualization='mds')
        mv.initialize_X(number=1)
        mv.optimize_X(algorithm='agd',max_iters=200)
        cost.append(mv.ncost)

        mv = Multiview(D_noisy,persp=persp2,verbose=1)
        mv.setup_visualization(visualization='mds')
        mv.initialize_X(number=runs)
        mv.optimize_X(algorithm='agd',max_iters=200)
        cost2.append(mv.ncost)

        mv = Multiview(D_noisy,persp=persp3,verbose=1)
        mv.setup_visualization(visualization='mds')
        mv.initialize_X(number=1)
        mv.optimize_X(algorithm='agd',max_iters=200)
        cost3.append(mv.ncost)

        mv = Multiview(D_noisy,persp=persp1,verbose=1)
        mv.setup_visualization(visualization='mds')
        mv.initialize_Q()
        mv.initialize_X(number=1)
        mv.optimize_all(algorithm='agd',max_iters=[30,20],rounds=40)
        costm.append(mv.ncost)
        
    fig = plt.figure()
    plt.loglog(noise_levels,cost,linestyle='--',marker='o',
               label='multi-perspective')
    plt.loglog(noise_levels,cost2,linestyle='--',marker='o', label='combine 2')
    plt.loglog(noise_levels,cost3,linestyle='--',marker='o', label='combine 3')
    plt.loglog(noise_levels,costm,linestyle='--',marker='o', label='multi-all')
    plt.legend()
    plt.xlabel('noise level')
    plt.ylabel('normalized stress')
    plt.show()
Ejemplo n.º 7
0
def example_disk(N=100):
    X = misc.disk(N,dim=3); labels=misc.labels(X)
    persp = perspective.Persp()
    persp.fix_Q(number=3,special='standard')
    Y = persp.compute_Y(X)
    D = distances.compute(Y)
    mv = Multiview(D,persp=persp,verbose=1,labels=labels)
    mv.setup_visualization(visualization='mds')
    mv.initialize_X(verbose=1)
    mv.optimize_X(batch_size=10,max_iters=50,verbose=1)
    mv.figureX(save='hola')
    mv.figureY()
    mv.figureH()
    plt.show()
Ejemplo n.º 8
0
def example_disk_Q(N=100):
    X = misc.disk(N,dim=3)
    persp = perspective.Persp()
    Q_true = persp.generate_Q(number=3,special='standard')
    Y_true = persp.compute_Y(X,Q=Q_true)
    D = distances.compute(Y_true)
    mv = Multiview(D,persp=persp,verbose=1)
    mv.setup_visualization(visualization='mds')
    mv.initialize_Q(random='orthogonal')
    mv.initialize_X(X0=X)
    mv.optimize_Q(verbose=2,batch_size=10)
    mv.optimize_Q(verbose=2)
    mv.figureH()
    plt.show()
Ejemplo n.º 9
0
def example_disk_all(N=100):
    X = misc.disk(N,dim=3); labels=misc.labels(X)
    persp = perspective.Persp()
    Q_true = persp.generate_Q(number=3,special='standard')
    Y_true = persp.compute_Y(X,Q=Q_true)
    D = distances.compute(Y_true)
    mv = Multiview(D,persp=persp,verbose=1,labels=labels)
    mv.setup_visualization(visualization='mds')
    mv.initialize_Q()
    mv.initialize_X()
    mv.optimize_all(agd=True,batch_size=10)
    mv.figureX(plot=True)
    mv.figureY(plot=True)
    mv.figureH()
    plt.show()
Ejemplo n.º 10
0
def example_disk_dimensions(N=100):
    print('\n***mds.example_disk_dimensions()***\n')
    dims = range(1,11)
    stress = []
    for dim in dims:
        Y = misc.disk(N,dim)
        D = distances.compute(Y)
        mds = MDS(D,dim,verbose=1,label=f'dimension : {dim}')
        mds.initialize_Y()
        mds.optimize(algorithm='agd',max_iters=300)
        stress.append(mds.ncost)
    fig = plt.figure()
    plt.semilogy(dims,stress)
    plt.xlabel('dimension')
    plt.ylabel('stress')
    plt.title('Normalized MDS stress for various dimensions')
    plt.show()
Ejemplo n.º 11
0
def example_disk_noisy(N=100,dim=2):
    print('\n***mds.example_disk_noisy()***\n')
    noise_levels = [0.001,0.005,0.01,0.03,0.07,0.1,0.15,0.2,0.7,1.0]
    stress = []
    Y = misc.disk(N,dim)
    D = distances.compute(Y)
    for noise in noise_levels:
        D_noisy = distances.add_noise(D,noise)
        mds = MDS(D_noisy,dim,verbose=1,title=f'noise : {noise:0.2f}')
        mds.initialize()
        mds.optimize(algorithm='agd',max_iters=300,verbose=1)
        stress.append(mds.ncost)
    fig = plt.figure()
    plt.loglog(noise_levels,stress,'.-')
    plt.xlabel('noise level')
    plt.ylabel('stress')
    plt.title('Normalized MDS stress for various noise levels')
    plt.show()
Ejemplo n.º 12
0
def noise_all(N=100):
    noise_levels = [0.001,0.01,0.07,0.15,0.4]
    stress = []
    X = misc.disk(N,dim=3)
    proj = perspective.Proj(dimX=2,dimY=2)
    proj.set_params_list(special='identity',number=3)
    Y = proj.project(X)
    D = distances.compute(Y)
    for noise in noise_levels:
        D_noisy = distances.add_noise(D,noise)
        mv = Multiview(D_noisy,persp=proj)
        mv.setup_visualization(visualization='mds')
        mv.initialize_X(verbose=1)
        mv.optimize_X(algorithm='gd',learning_rate=1,max_iters=300,
                      verbose=1)
        stress.append(mv.cost)
    fig = plt.figure()
    plt.semilogx(noise_levels,stress)
    plt.show()
Ejemplo n.º 13
0
def embeddability_noise(ax=None):
    print('\n**mds.embeddability_noise()')
    N=50
    ncost = []
    noise_list = [0]+10**np.arange(-4,0,0.5)
    X = misc.disk(N,4)
    DD = distances.compute(X)
    for noise in noise_list:
        D = DD*(1+np.random.randn(N,N)*noise)
        mds = MDS(D,dim=4,verbose=1)
        mds.initialize()
        mds.optimize()
        ncost.append(mds.ncost)
    if ax is None:
        fig, ax = plt.subplots(1)
        plot = True
    else:
        plot = False
    ax.semilogx(noise_list,ncost)
    if plot is True:
        plt.show()
Ejemplo n.º 14
0
def example_disk(N=100,dim=2,**kwargs):
    print('\n***mds.example_disk()***')
    
    Y = misc.disk(N,dim); labels = misc.labels(Y)
    
    plt.figure()
    plt.scatter(Y[:,0],Y[:,1],c=labels)
    plt.title('original data')
    plt.draw()
    plt.pause(0.1)
    
    D = distances.compute(Y)
    
    title = 'basic disk example'
    mds = MDS(D,dim=dim,verbose=1,title=title,labels=labels)
    mds.initialize()
    mds.figureX(title='initial embedding')
    mds.optimize(**kwargs)
    mds.figureX(title='final embedding',labels=labels,edges=.2)
    mds.figure(title='final embedding',labels=labels)
    plt.show()
Ejemplo n.º 15
0
def embeddability_dims(ax=None):
    print('\n**mds.embeddability_dims()')
    N=50
    ncost = []
    dims = list(range(2,50,5))
    XX = misc.disk(N,20)
    #XX = misc.box(N,20)
    for dim in dims:
        X = XX[:,0:dim]
        D = distances.compute(X)
        mds = MDS(D,dim=2,verbose=1)
        mds.initialize()
        mds.optimize()
        ncost.append(mds.ncost)
    if ax is None:
        fig, ax = plt.subplots(1)
        plot = True
    else:
        plot = False
    ax.plot(dims,ncost)
    if plot is True:
        plt.show()
Ejemplo n.º 16
0
def agd_mds_standard(N=100,dim=2,trials=3,runs=5):
    """\
    test convergence of adaptive gradient descent for MDS problem, by solving 
    the MDS problems with multiple initial parameters.
    """
    print('*** test.agd_mds_standard() ***')
    print(f'  N : {N}')
    print(f'  dim : {dim}')
    print()

    for i in range(trials):
        print(f'  Trial # {i}')
        print('  Normalized cost :')
        Y = misc.disk(N,dim)
        D = distances.compute(Y)
        vis = mds.MDS(D,dim=dim)
        stress = []
        for run in range(runs):
            vis.initialize_Y()
            vis.optimize(algorithm='agd')
            stress.append(vis.ncost)
            print(f'  {vis.ncost:0.2e}')
        print()
Ejemplo n.º 17
0
def noisy(N=100):
    noise_levels = [0.0001, 0.001, 0.01, 0.1, 0.5]
    stress = []
    X = misc.disk(N, dim=3)
    proj = perspective.Proj()
    proj.set_params_list(special='standard')
    Y = proj.project(X)
    D = distances.compute(Y)
    for noise in noise_levels:
        D_noisy = distances.add_noise(D, noise)
        stress_best = []
        for i in range(3):
            mv = Multiview(D_noisy, persp=proj, verbose=1)
            mv.setup_visualization(visualization='mds')
            mv.initialize_X()
            mv.optimize_X(algorithm='agd')
            stress_best.append(mv.normalized_cost)
        stress.append(min(stress_best))
    fig = plt.figure()
    plt.loglog(noise_levels, stress, linestyle='--', marker='o')
    plt.title('Normalized total stress')
    plt.xlabel('noise level')
    plt.ylabel('total stress')
    plt.show()