Example #1
0
    def forward(self, x):
        #print('x in:' , x.shape)

        rad1 = 0.7272
        radius = rad1
        adjacency_method = 'cyflann'
        adjacency_kwds = {'radius': radius}
        affinity_method = 'gaussian'
        affinity_kwds = {'radius': radius}
        laplacian_method = 'symmetricnormalized'
        laplacian_kwds = {'scaling_epps': radius}

        geom = Geometry(adjacency_method=adjacency_method,
                        adjacency_kwds=adjacency_kwds,
                        affinity_method=affinity_method,
                        affinity_kwds=affinity_kwds,
                        laplacian_method=laplacian_method,
                        laplacian_kwds=laplacian_kwds)

        x = x.view(100, -1)
        #print('before embedding:', x.shape)
        geom.set_data_matrix(x)
        spectral = SpectralEmbedding(n_components=10,
                                     eigen_solver='amg',
                                     geom=geom,
                                     drop_first=False)  # use 3 for spectral
        embed_spectral = spectral.fit_transform(x)
        embed_spectral = torch.from_numpy(embed_spectral).float()
        #print('x_totorch:', embed_spectral.shape)

        x = embed_spectral.view(-1, 10)
        x = self.fc(x)
        return x
Example #2
0
    def forward(self, x):

        radius = 1.2
        adjacency_method = 'cyflann'
        adjacency_kwds = {'radius': radius}
        affinity_method = 'gaussian'
        affinity_kwds = {'radius': radius}
        laplacian_method = 'symmetricnormalized'
        laplacian_kwds = {'scaling_epps': radius}

        geom = Geometry(adjacency_method=adjacency_method,
                        adjacency_kwds=adjacency_kwds,
                        affinity_method=affinity_method,
                        affinity_kwds=affinity_kwds,
                        laplacian_method=laplacian_method,
                        laplacian_kwds=laplacian_kwds)
        x = x.view(100, -1)
        #print(x.shape)
        geom.set_data_matrix(x)
        lle = LocallyLinearEmbedding(n_components=10,
                                     eigen_solver='dense',
                                     geom=geom)
        embed_lle = lle.fit_transform(x)
        embed_lle = torch.from_numpy(embed_lle).float()

        x = embed_lle.view(-1, 10)
        x = self.fc(x)
        return x
Example #3
0
 def compute_geom_brute(self, diffusion_time, n_neighbors):
     data = self.data
     dim = self.dim
     #set radius according to paper (i think this is dim not d)
     radius = (diffusion_time * (diffusion_time * np.pi * 4)**(dim/2))**(0.5)
     #set adjacency radius large enough that points beyond it have affinity close to zero
     bigradius = 3 * radius
     adjacency_method = 'brute'
     adjacency_kwds = {'radius':bigradius}
     affinity_method = 'gaussian'
     affinity_kwds = {'radius':radius}
     laplacian_method = 'geometric'
     laplacian_kwds = {'scaling_epps':1}
     geom = Geometry(adjacency_method=adjacency_method, adjacency_kwds=adjacency_kwds,
                     affinity_method=affinity_method, affinity_kwds=affinity_kwds,
                     laplacian_method=laplacian_method, laplacian_kwds=laplacian_kwds)
     geom.set_data_matrix(data)
     geom.adjacency_matrix = geom.compute_adjacency_matrix()
     geom.laplacian_matrix = geom.compute_affinity_matrix()
     geom.laplacian_matrix = self.get_laplacian(geom, radius)
     return(geom)
Example #4
0
 def compute_geom(self, diffusion_time, n_neighbors):
     data = self.data
     dim = self.dim
     #set radius according to paper (i think this is dim not d)
     radius = (diffusion_time * (diffusion_time * np.pi * 4)**(dim/2))**(0.5)
     #set adjacency radius large enough that points beyond it have affinity close to zero
     bigradius = 3 * radius
     adjacency_method = 'cyflann'
     cyflann_kwds = {'index_type':'kdtrees', 'num_trees':10, 'num_checks':n_neighbors}
     adjacency_kwds = {'radius':bigradius, 'cyflann_kwds':cyflann_kwds}
     affinity_method = 'gaussian'
     affinity_kwds = {'radius':radius}
     laplacian_method = 'geometric'
     laplacian_kwds = {'scaling_epps':radius}
     geom = Geometry(adjacency_method=adjacency_method, adjacency_kwds=adjacency_kwds,
                     affinity_method=affinity_method, affinity_kwds=affinity_kwds,
                     laplacian_method=laplacian_method, laplacian_kwds=laplacian_kwds)
     geom.set_data_matrix(data)
     adjacency_matrix = geom.compute_adjacency_matrix()
     laplacian_matrix = geom.compute_laplacian_matrix()
     return(geom)
Example #5
0
# Affinity an NxN (sparse) pairwise matrix insicated similarity between points
# Laplacian an NxN (sparse) pairwsie matrix containing geometric manifold information

radius = 5
adjacency_method = 'cyflann'
adjacency_kwds = {'radius': radius}  # ignore distances above this radius
affinity_method = 'gaussian'
affinity_kwds = {'radius': radius}  # A = exp(-||x - y||/radius^2)
laplacian_method = 'geometric'
laplacian_kwds = {
    'scaling_epps': radius
}  # scaling ensures convergence to Laplace-Beltrami operator

geom = Geometry(adjacency_method=adjacency_method,
                adjacency_kwds=adjacency_kwds,
                affinity_method=affinity_method,
                affinity_kwds=affinity_kwds,
                laplacian_method=laplacian_method,
                laplacian_kwds=laplacian_kwds)

# You can/should also use the set_data_matrix, set_adjacency_matrix, set_affinity_matrix
# to send your data set (in whichever form it takes) this way.
geom.set_data_matrix(X)

# You can get the distance, affinity etc with e.g: Geometry.get_distance_matrix()
# you can update the keyword arguments passed inially using these functions
adjacency_matrix = geom.compute_adjacency_matrix()
# by defualt this is pass-by-reference. Use copy=True to get a copied version.

# If you don't want to pre-compute a Geometry you can pass a dictionary or geometry
# arguments to one of the embedding classes.
geom = {