RapidLib  v2.2.0
A simple library for interactive machine learning
knnClassification.h
Go to the documentation of this file.
1 
10 #pragma once
11 
12 #include "baseModel.h"
13 
14 #ifndef EMSCRIPTEN
15 #include "../dependencies/json/json.h"
16 #endif
17 
18 #include <optional>
19 #include <vector>
20 
22 template<typename T>
23 class knnClassification final : public baseModel<T>
24 {
25  public:
32  knnClassification(const std::optional<size_t> num_inputs,
33  const std::vector<size_t> &which_inputs,
34  const std::vector<trainingExampleTemplate<T> > &trainingSet,
35  const int k);
36 
38 
43  void addNeighbour(const int classNum, const std::vector<T>& features);
44 
49  T run(const std::vector<T>& inputVector) const override;
50 
56  void train(const std::vector<trainingExampleTemplate<T> >& trainingSet) override;
57 
63  void train(const std::vector<trainingExampleTemplate<T>>& trainingSet, const std::size_t whichOutput) override;
64 
66  void reset() override;
67 
71  size_t getNumInputs() const override;
72 
76  std::vector<size_t> getWhichInputs() const override;
77 
79  size_t getK() const;
80 
84  void setK(int newK);
85 
86 #ifndef EMSCRIPTEN
90  void getJSONDescription(Json::Value& currentModel) const override;
91 #endif
92 
93  private:
94  size_t numInputs {};
95  std::vector<size_t> whichInputs {};
96  std::size_t whichOutput {};
97  std::vector<trainingExampleTemplate<T>> neighbours {};
98  size_t desiredK {}; //K that user asked for might be limited but number of examples
99  size_t currentK {}; //K minimum of desiredK or neighbours.size()
100  inline void updateK();
101 };
Definition: baseModel.h:43
Definition: knnClassification.h:24
size_t getK() const
Definition: knnClassification.cpp:51
std::vector< size_t > getWhichInputs() const override
Definition: knnClassification.cpp:46
void reset() override
Definition: knnClassification.cpp:35
~knnClassification()
Definition: knnClassification.cpp:33
void setK(int newK)
Definition: knnClassification.cpp:61
T run(const std::vector< T > &inputVector) const override
Definition: knnClassification.cpp:94
size_t getNumInputs() const override
Definition: knnClassification.cpp:40
void addNeighbour(const int classNum, const std::vector< T > &features)
Definition: knnClassification.cpp:68
void getJSONDescription(Json::Value &currentModel) const override
Definition: knnClassification.cpp:179
knnClassification(const std::optional< size_t > num_inputs, const std::vector< size_t > &which_inputs, const std::vector< trainingExampleTemplate< T > > &trainingSet, const int k)
Definition: knnClassification.cpp:20
void train(const std::vector< trainingExampleTemplate< T > > &trainingSet) override