Started implementing locally linear embeddings.
LLE now runs but seems to generate incorrect results, at least in the case of the simple swiss roll example.
Implemented and tested spectral clustering for graphs with the 3 methods (unnormalized Laplacian, Shi and Malik's normalized Laplcian, Ng - Jordan - Weiss normalized Laplacian). Refactored eigensolver code to solve non symmetric eigenproblems.
Spectral clustering for arbitrary similarity matrices implemented and successfully tested.
Refactored and tested tree walk kernel code. Started clustering with spectral clustering by similarity computed by tree walk kernels.
Massive refactoring to implement tree walk kernel + spectral clustering of images. Still debugging.
Spectral clustering with tree walk kernels for similarity implemented and tested. Not very good results both visually in dimensions 2 and 3 and through K-means in dimension K. Will investigate clustering through spectrum distance.
Now tested correctly spectral clustering using the random walk Laplacian. All in all, only the normalized Laplacian seems to give decent results - although it still isn't robust enough to outliers. I may need to investigate more robust clustering and classification method.
Started implementing the 3 types of spectral clustering directly.
Implemented clustering using distance between segmentation graph spectra.
Still debugging clutering by graph spectra.
Wrote algorithms for subspace comparison, in the goal of comparing Laplacian eigenspaces for classification/clustering. Not tested yet. Algorithms taken from Matrix Computations 1996.
Added SVM code from libsvm. Will have to modify the code to allow arbitrary kernel functions, notably for subspace distance computations.
Implemented principal angle classifier. Have yet to test.
Started testing principal angles classification. Testing shows that Arpack is inadequate for computing all the eigenvalues and eigenvectors (as might sometimes be necessary) of matrices. Code will have to be refactored to use dense matrices instead, and rely on Eigen's eigensolvers.
Further testing demonstrates that using the canonical basis as a comparison point is a fundamentally flawed idea - the principal angles of any subspace against the canonical basis are all 0 as obviously the dimensions of the subspace are orthogonal.

So classification based on characteristic vectors do not seem to be adequate to compare subspaces angles. It might be worth investigating classification methods based on an arbitrary similarity matrix, where similarity would correspond to some distance between subspaces. However, Matrix Computations only considers distance between equidimensional subspaces.
Refactored spectral graph theory basic stuff and spectral clustering modules into separate subprojects.
Started factoring tests out into separate projects. Still haven't finished configuring all the property sheets, nor should anything compile right now.
Implemented (not tested) the corrected classifier based on minimal/average canonical angle as a measure of similarity between subspaces. Still have to pad eigenvector matrices with 0, which isn't too good - as the graph do not have the same number of vertices, their eigenvectors are not really lying on a common high-dimensional space. It might be worth it to enforce a fixed number of vertices for this reason.
Started implementing a new approach to classification through canonical angles. To tackle the dimensionality issue, without "dumbing down" the segmentation to a fixed number of segments, we now consider subgraphs of the same size "centered" around the character's face, which we compare using subspaces spanned by Dirichlet eigenvectors for efficiency.

Finished implementing and testing BFS, which is used to determine said subgraphs.