Implemented ground graph. Refactored main code into classifier testing module, testing shows a bug as 1 nearest neighbor with duplicating of entries in the dataset is not 100%, will have to identify the source of the error<
Further testing revealed different behavior on different runs of the same executable as well as QNaNs, which indicates there is some uninitialized memory lying around somewhere. Haven't found it just yet.
Tested graph attributes, weights and laplacian matrix computation, eigenvalues computation for bugs which could provoke the weird classification errors, without success. I will try and rewrite the leave one out recognition rate method so I'm sure it's correct. Refactored some code into Segmentation.cpp/h, Utils.cpp/h .
Resolved the bug causing improper classification, better covariance matrix segment labelling for angle comparison, lots of refactoring. Now getting around 15% recognition rate fairly consistently in regards to variation to parameters, which is encouraging.
Updated docs.
Tuning parameters, and lots of refactoring of code into separate Segmentation, PreProcessing modules to achieve it cleanly.
Refactored labeling and weight computing code to be type-safe in the type and dimensions of the labels.
Ground vertex proved unsuccessful at raising recognition rate. Added some stats and matlab script to plot them.
Segmentation now only returns the largest connected component of the segmentation graph, which breaks the rest as it assumes that the graph corresponds to the segmentation. Next steps involve:
- fixing the rest so it works with this graph.
- using only the K smallest non zero eigenvalues where K is smaller than the number of vertices of the smallest graph of the set, so we exclude the imprecise larger eigenvalues and get more relevant comparison of spectra.
Now classifies with the k smallest non zero eigenvalues, for a small but significant increase in recognition rate to about 20% for a sensible choice for k. Added some data.
Removed docs from this branch.