44 lines
1.7 KiB
C++
44 lines
1.7 KiB
C++
// 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_
|
|
|
|
|