22 using namespace shogun;
66 return "LaplacianEigenmaps";
98 CFibonacciHeap* heap =
new CFibonacciHeap(N);
105 heap->insert(j,W_matrix[i*N+j]);
108 heap->extract_min(tmp);
111 for (j=0; j<
m_k; j++)
112 W_matrix[i*N+heap->extract_min(tmp)] *= -1.0;
117 if (W_matrix[i*N+j]>0.0)
118 W_matrix[i*N+j] = 0.0;
120 W_matrix[i*N+j] *= -1.0;
134 if (W_matrix[i*N+j]!=0.0 || W_matrix[j*N+i]==0.0)
136 W_matrix[j*N+i] = W_matrix[i*N+j];
138 if (W_matrix[j*N+i]!=0.0 || W_matrix[i*N+j]==0.0)
140 W_matrix[i*N+j] = W_matrix[j*N+i];
143 if (W_matrix[i*N+j] != 0.0)
147 W_matrix[i*N+j] = tmp;
148 W_matrix[j*N+i] = tmp;
170 D_diag_vector[i] += W_matrix[i*N+j];
174 for (i=0; i<N*N; i++)
179 W_matrix[i*N+i] += D_diag_vector[i];
183 int eigenproblem_status = 0;
185 arpack_dsxupd(W_matrix.
matrix,D_diag_vector,
true,N,
m_target_dim+1,
"LA",
true,3,
false,-1e-9,0.0,
186 eigenvalues_vector,W_matrix.
matrix,eigenproblem_status);
188 if (eigenproblem_status!=0)
189 SG_ERROR(
"DSXUPD failed with code %d\n",eigenproblem_status);
195 int eigenproblem_status = 0;
200 rhs[i*N+i] = D_diag_vector[i];
202 wrap_dsygvx(1,
'V',
'U',N,W_matrix.
matrix,N,rhs,N,1,
m_target_dim+2,eigenvalues_vector,W_matrix.
matrix,&eigenproblem_status);
204 if (eigenproblem_status)
205 SG_ERROR(
"DSYGVX failed with code: %d.\n",eigenproblem_status);
220 new_features[j*m_target_dim+i] = W_matrix[j*(m_target_dim+1)+i+1];
222 new_features[j*m_target_dim+i] = W_matrix[(i+1)*N+j];
Class Distance, a base class for all the distances used in the Shogun toolbox.
class EmbeddingConverter used to create embeddings of features, e.g. construct dense numeric embeddin...
virtual void destroy_matrix()
virtual ~CLaplacianEigenmaps()
virtual int32_t get_num_vectors() const =0
void add(bool *param, const char *name, const char *description="")
float64_t get_tau() const
virtual void remove_lhs_and_rhs()
virtual CSimpleFeatures< float64_t > * construct_embedding(CFeatures *features, SGMatrix< float64_t > W_matrix)
void set_tau(float64_t tau)
void wrap_dsygvx(int itype, char jobz, char uplo, int n, double *a, int lda, double *b, int ldb, int il, int iu, double *eigenvalues, double *eigenvectors, int *info)
virtual CSimpleFeatures< float64_t > * embed_distance(CDistance *distance, CFeatures *features=NULL)
virtual CFeatures * apply(CFeatures *features)
The class Features is the base class of all feature objects.
static float64_t exp(float64_t x)
virtual bool init(CFeatures *lhs, CFeatures *rhs)
#define SG_MALLOC(type, len)
SGMatrix< float64_t > get_distance_matrix()
virtual const char * get_name() const
#define SG_CALLOC(type, len)