Note that we use equal aspect ratio otherwise it is hard to determine what the actual distortion is. ''' from covar_plotter import plot_cov_ellipse n_plot = 50 rng = np.random.RandomState(8675309) sample_points = rng.choice(range(N), n_plot, replace = False) f, ax = plt.subplots() ax.scatter(embed_isomap[:, 0], embed_isomap[:, 1], s = 1) ax.set_aspect('equal') # if an ellipse is a circle no distortion occured. for i in range(n_plot): ii = sample_points[i] cov = H_isomap[ii, :, :] plot_cov_ellipse(cov*0.05, embed_isomap[ii, :] ,ax=ax, edgecolor='none', alpha = 0.5) plt.savefig("tutorial_isomap_plot.png", format='png', bbox_inches='tight') plt.close() ''' we can also do this with the spectral embedding: ''' f, ax = plt.subplots() ax.scatter(embed_spectral[:, 0], embed_spectral[:, 1], s = 1) ax.set_aspect('equal') # if an ellipse is a circle no distortion occured. for i in range(n_plot): ii = sample_points[i] cov = H_spectral[ii,:,:] plot_cov_ellipse(cov*0.01, embed_spectral[ii,:] ,ax=ax, edgecolor='none', alpha = 0.5) plt.savefig("tutorial_spectral_plot.png", format='png', bbox_inches='tight') plt.close()
# Rmetric now from scipy.sparse.linalg.eigen.lobpcg.lobpcg import symeig from sklearn.utils.arpack import eigsh #lambdas, diffusion_map = eigsh(-laplacian, k=n_components, # sigma=1.0, which='LM', # tol=eigen_tol) A = model.get_affinity_matrix() #la, va = eigsh(A,k=5,which='LM') #print( la ) L = graph_laplacian( A, scaling_epps=rad) #ll, vl = eigsh(L,k=5,which='LM') #print( ll ) h,g, dum1, dum2, dum3 = riemann_metric(Y, laplacian=L, n_dim = 2 ) print( "h.shape=", h.shape ) print( h[:4,:,:] ) print( "....Plotting the dual rmetric...." ) from covar_plotter import plot_cov_ellipse ax = plt.gca() for i in range(n_samplot): ii = iisamples[i] cov = h[ ii, :, : ].squeeze() plot_cov_ellipse( cov/1000, Y[ii,:], nstd=2, ax=ax, edgecolor='none', facecolor=(thet[ii],0,1-thet[ii])) plt.show(block=True)
#plt.show() ax0 = 1 ax1 = 3 iax = [ax0, ax1] ax = plt.gca() plt.plot( Y[iisamples,ax0], Y[ iisamples, ax1], marker='.', markersize=2,linestyle='None',label='Y' ) #plt.show() if compute_H: degrees = np.asarray(similarity_matrix.sum(axis=1)).squeeze() degmax = np.max( degrees ) cov0 = np.eye(2)/1.e4 for i in range(n_samplot): ii = iisamples[i] cov = H[ ii, (1,3), (1,3) ].squeeze() if i in [0,3,100]: print( cov ) if np.linalg.det(cov)>0: plot_cov_ellipse( cov*rad*5, Y[ii,(1,3)], nstd=2, ax=ax, edgecolor='none', facecolor=[ 0, degrees[ii]/degmax, 0]) # plot_cov_ellipse( cov0, Y[ii,:2], nstd=2, ax=ax, edgecolor='none', facecolor='pink') # print( cov, np.linalg.det( cov ) ) if save_fig: plt.savefig( "spectra-emb"+".png", format='png' ) plt.show()