// Copyright (C) 2015 Davis E. King (davis@dlib.net) | |
// License: Boost Software License See LICENSE.txt for the full license. | |
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. | |
!*/ | |
} | |