KMeans.h 948 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef KMEANS_H
  3. #define KMEANS_H
  4. #include <atomic>
  5. #include <vector>
  6. #include <limits>
  7. #include <mutex>
  8. #include "SamplesBuffer.h"
  9. #include "json/single_include/nlohmann/json.hpp"
  10. class KMeans {
  11. public:
  12. KMeans(size_t NumClusters = 2) : NumClusters(NumClusters) {
  13. MinDist = std::numeric_limits<CalculatedNumber>::max();
  14. MaxDist = std::numeric_limits<CalculatedNumber>::min();
  15. };
  16. void train(const std::vector<DSample> &Samples, size_t MaxIterations);
  17. CalculatedNumber anomalyScore(const DSample &Sample) const;
  18. void toJson(nlohmann::json &J) const {
  19. J = nlohmann::json{
  20. {"CCs", ClusterCenters},
  21. {"MinDist", MinDist},
  22. {"MaxDist", MaxDist}
  23. };
  24. }
  25. private:
  26. size_t NumClusters;
  27. std::vector<DSample> ClusterCenters;
  28. CalculatedNumber MinDist;
  29. CalculatedNumber MaxDist;
  30. };
  31. #endif /* KMEANS_H */