// Copyright (C) 2015 Davis E. King (davis@dlib.net) // License: Boost Software License See LICENSE.txt for the full license. #undef DLIB_SPECTRAL_CLUSTEr_ABSTRACT_H_ #ifdef DLIB_SPECTRAL_CLUSTEr_ABSTRACT_H_ #include <vector> namespace dlib { template < typename kernel_type, typename vector_type > std::vector<unsigned long> spectral_cluster ( const kernel_type& k, const vector_type& samples, const unsigned long num_clusters ); /*! requires - samples must be something with an interface compatible with std::vector. - The following expression must evaluate to a double or float: k(samples[i], samples[j]) - num_clusters > 0 ensures - Performs the spectral clustering algorithm described in the paper: On spectral clustering: Analysis and an algorithm by Ng, Jordan, and Weiss. and returns the results. - This function clusters the input data samples into num_clusters clusters and returns a vector that indicates which cluster each sample falls into. In particular, we return an array A such that: - A.size() == samples.size() - A[i] == the cluster assignment of samples[i]. - for all valid i: 0 <= A[i] < num_clusters - The "similarity" of samples[i] with samples[j] is given by k(samples[i],samples[j]). This means that k() should output a number >= 0 and the number should be larger for samples that are more similar. !*/ } #endif // DLIB_SPECTRAL_CLUSTEr_ABSTRACT_H_