eis/eqpalg/.do_not_use/distribution/dist.h

142 lines
3.6 KiB
C
Raw Permalink Normal View History

/**
* @file eqpalg/distribution/Dist.h
* @brief
*
*
* @author Cat (null.null.null@qq.com)
* @version 0.1
* @date 2021-08-02
*
* Company: Baosight Co. Ltd.
* DO NOT COPY/USE WITHOUT PERMISSION
*
*/
#pragma once
#include <dlib/statistics.h>
#include <boost/math/distributions/chi_squared.hpp>
#include <boost/math/distributions/normal.hpp>
#include <boost/math/distributions/students_t.hpp>
#include <boost/math/distributions/skew_normal.hpp>
#include <algorithm>
#include <memory>
#include <tuple>
#include <vector>
#include "mix_cc/type/range.h"
namespace distribution {
using boost::math::quantile;
/**
* @brief
* Prob确定出错的最大可能性
*
*
*
*/
class Dist {
public:
enum class DistTypes {
unknown,
student_t,
normal,
skew_normal
}; ///< 预设三种分布
constexpr static double test_prec = 0.01;
protected:
DistTypes dist_type_; ///< 分布类型
bool valid_; ///< 可用性
dlib::running_stats<double> rs_; ///< dlib
mix_cc::float_range_t legal_range_; ///< 合法分布区间
std::string rule_id_;
std::shared_ptr<boost::math::normal> normal_; ///< 正态分布
std::shared_ptr<boost::math::students_t> students_t_; ///< T分布
std::shared_ptr<boost::math::skew_normal> skew_normal_; ///< 偏态分布
std::vector<double> warning_sample_; ///< 报警样本
double predefied_prob_ = 0.975; ///< 预定义的置信概率 3σ的大概置信度
double prob_ = 0.5;
public:
/**
* @brief
*/
Dist(/* args */);
/**
* @brief Destroy the Dist object
*/
~Dist();
/**
* @brief
* @return DistTypes
*/
DistTypes get_distribution_type() const;
/**
* @brief
* @param prob
* @return int
*/
int set_predefined_prob(double prob);
/**
* @brief Get the shifted prob object
* @return double
*/
double get_shifted_prob() const;
/**
* @brief
* ,
* @param rs dlib::running_stats
* @param tmp_data My Param doc
* @return int
*/
int auto_test(dlib::running_stats<double> rs,
const std::vector<double>& tmp_data);
/**
* @brief
* @param warning_sample My Param doc
* @return int
*/
int set_warning_sample_optional(const std::vector<double>& warning_sample);
/**
* @brief
* @return true
* @return false
*/
bool valid() const;
/**
* @brief
* @return mix_cc::float_range_t
*/
mix_cc::float_range_t get_range() const;
protected:
/**
* @brief
* @param prob
* @param tmp_data
* @return double
*/
double get_error_rate_type_1(const double& prob,
const std::vector<double>& tmp_data);
/**
* @brief
* @param prob
* @return mix_cc::float_range_t
*/
mix_cc::float_range_t get_range(double prob);
};
} // namespace distribution