eis/eqpalg/.do_not_use/distribution/frame.h

95 lines
2.3 KiB
C
Raw Permalink Normal View History

/**
* @file eqpalg/distribution/frame.h
* @brief
* @author Cat (null.null.null@qq.com)
* @version 0.1
* @date 2021-08-21
*
* Copyright: Baosight Co. Ltd.
* DO NOT COPY/USE WITHOUT PERMISSION
*
*/
#pragma once
#include "mix_cc/algorithm/is_in_range.h"
#include "mix_cc/algorithm/split.h"
#include "mix_cc/exception.h"
#include <dlib/statistics.h>
#include <eqpalg/define/dlib.h>
#include <eqpalg/distribution/data_mapping.h>
#include <eqpalg/distribution/dist.h>
#include <log4cplus/LOG.h>
#include <algorithm>
#include <tuple>
#include <vector>
namespace distribution {
class Frame {
public:
static constexpr double legal_diff = 0.3; ///< 默认的合法差值30%
static constexpr double normal_skewness =
0; ///< 近似正态分布容许的偏度偏离范围
static constexpr double normal_ex_k = 0; ///< 近似正态分布的超值峰度偏离范文
protected:
const std::unique_ptr<LOG> logger_;
const std::string rule_id_;
const size_t dims_;
public:
/**
* @brief Construct a new Frame object
* @param ruleId My Param doc
*/
Frame(const std::string& ruleId, size_t dims);
/**
* @brief
* @param prob My Param doc
* @return int
*/
int init_prob(double prob);
/**
* @brief
* @return int
*/
int auto_detect_distribution(Rs rs, const SampleWindow& tmp_data);
/**
* @brief
* @return mix_cc::float_range_t
*/
small_vector<mix_cc::float_range_t, 3> get_range();
/**
* @brief
* @return true
* @return false
*/
bool is_distribution_valid();
/**
* @brief /
* @return true
* @return false
*/
bool is_transformed();
protected:
small_vector<Dist, 3> dist_; ///< 分布情况和合理上下限
protected:
double prob_; ///< 接受区间0~1)
small_vector<mix_cc::float_range_t, 3> legal_range_; ///< 合法数值的上下限
bool valid = true; ///< 是否有效
protected:
bool
is_transformed_; ///< 数据是否因不满足正态分布而被映射作用区间,暂时不适用
DataMapping data_mapping_; ///< 用于数据映射的类,暂时不使用
};
} // namespace distribution