qdtsne
A quick and dirty t-SNE C++ library
Loading...
Searching...
No Matches
initialize.hpp
Go to the documentation of this file.
1#ifndef QDTSNE_INITIALIZE_HPP
2#define QDTSNE_INITIALIZE_HPP
3
5
6#include <vector>
7#include <stdexcept>
8#include <cstddef>
9
10#include "Status.hpp"
11#include "Options.hpp"
12#include "gaussian.hpp"
13#include "symmetrize.hpp"
14
20namespace qdtsne {
21
25namespace internal {
26
27template<std::size_t num_dim_, typename Index_, typename Float_>
28Status<num_dim_, Index_, Float_> initialize(NeighborList<Index_, Float_> nn, Float_ perp, const Options& options) {
29 compute_gaussian_perplexity(nn, perp, options.num_threads);
30 symmetrize_matrix(nn);
31 return Status<num_dim_, Index_, Float_>(std::move(nn), options);
32}
33
34}
53template<std::size_t num_dim_, typename Index_, typename Float_>
55 Float_ perp;
56 if (options.infer_perplexity && neighbors.size()) {
57 perp = static_cast<Float_>(neighbors.front().size())/3;
58 } else {
59 perp = options.perplexity;
60 }
61 return internal::initialize<num_dim_>(std::move(neighbors), perp, options);
62}
63
79template<std::size_t num_dim_, typename Index_, typename Input_, typename Float_>
81 const int K = perplexity_to_k(options.perplexity);
82 auto neighbors = knncolle::find_nearest_neighbors(prebuilt, K, options.num_threads);
83 return internal::initialize<num_dim_>(std::move(neighbors), static_cast<Float_>(options.perplexity), options);
84}
85
104template<std::size_t num_dim_, typename Index_, typename Float_, class Matrix_>
106 std::size_t data_dim,
107 std::size_t num_points,
108 const Float_* data,
110 const Options& options)
111{
112 auto index = builder.build_unique(knncolle::SimpleMatrix<Index_, Float_>(data_dim, num_points, data));
113 return initialize<num_dim_>(*index, options);
114}
115
116}
117
118#endif
Options for the t-SNE algorithm.
Status of the t-SNE iterations.
std::unique_ptr< Prebuilt< Index_, Data_, Distance_ > > build_unique(const Matrix_ &data) const
Status of the t-SNE iterations.
Definition Status.hpp:65
NeighborList< Index_, Distance_ > find_nearest_neighbors(const Prebuilt< Index_, Data_, Distance_ > &index, int k, int num_threads=1)
Quick and dirty t-SNE.
knncolle::NeighborList< Index_, Float_ > NeighborList
Lists of neighbors for each observation.
Definition utils.hpp:36
int perplexity_to_k(double perplexity)
Definition utils.hpp:45
Status< num_dim_, Index_, Float_ > initialize(NeighborList< Index_, Float_ > neighbors, const Options &options)
Definition initialize.hpp:54
Options for initialize().
Definition Options.hpp:14
bool infer_perplexity
Definition Options.hpp:30
int num_threads
Definition Options.hpp:109
double perplexity
Definition Options.hpp:22