3 #ifndef FORPY_IMPURITIES_RENYIENTROPY_H_ 4 #define FORPY_IMPURITIES_RENYIENTROPY_H_ 8 #include "../util/serialization/basics.h" 15 #include "../util/checks.h" 16 #include "../util/exponentials.h" 39 inline virtual float operator()(
const float *class_members_numbers,
40 const size_t &n,
const float &fsum)
const {
44 if (
q == std::numeric_limits<float>::infinity()) {
50 FASSERT(static_cast<float>(std::accumulate(class_members_numbers,
51 class_members_numbers + n,
52 static_cast<float>(0))) == fsum);
54 if (fsum == 0.f)
return 0.f;
56 float entropy_sum = 0.f;
58 if (ceilf(
q) ==
q || floorf(
q) ==
q) {
60 const uint whole_q =
static_cast<uint>(
q);
61 for (
size_t i = 0; i < n; ++i) {
62 quot = *(class_members_numbers++) / fsum;
63 entropy_sum +=
fpowi(quot, whole_q);
68 for (
size_t i = 0; i < n; ++i) {
69 quot = *(class_members_numbers++) / fsum;
70 entropy_sum += powf(quot,
q);
73 return logf(entropy_sum) / (1.f -
q);
76 inline friend std::ostream &
operator<<(std::ostream &stream,
78 stream <<
"forpy::RenyiEntropy[alpha=" <<
self.get_alpha() <<
"]";
91 friend class cereal::access;
92 template <
class Archive>
94 ar(cereal::make_nvp(
"base", cereal::base_class<IEntropyFunction>(
this)),
108 #endif // FORPY_IMPURITIES_RENYIENTROPY_H_ std::unique_ptr< ShannonEntropy > shannon_entropy
virtual float operator()(const float *class_members_numbers, const size_t &n, const float &fsum) const
float fpowi(float base, unsigned int exp)
Computes a float power by an unsigned int.
RenyiEntropy()
DON'T USE. Non-initializing constructor for serialization purposes.
bool operator==(const IEntropyFunction &rhs) const
DISALLOW_COPY_AND_ASSIGN(RenyiEntropy)
Interface for an entropy calculation functor.
#define FASSERT(condition)
std::unique_ptr< ClassificationError > classification_error
CEREAL_REGISTER_TYPE(forpy::RenyiEntropy)
Computes the Renyi entropy.
void serialize(Archive &ar, const uint &)
friend std::ostream & operator<<(std::ostream &stream, const RenyiEntropy &self)
unsigned int uint
Convenience typedef for unsigned int.
std::unique_ptr< InducedEntropy > induced_p