12345678910111213141516171819202122232425262728 |
- package mathx
- import "math"
- const epsilon = 1e-6
- // CalcEntropy calculates the entropy of m.
- func CalcEntropy(m map[interface{}]int) float64 {
- if len(m) == 0 || len(m) == 1 {
- return 1
- }
- var entropy float64
- var total int
- for _, v := range m {
- total += v
- }
- for _, v := range m {
- proba := float64(v) / float64(total)
- if proba < epsilon {
- proba = epsilon
- }
- entropy -= proba * math.Log2(proba)
- }
- return entropy / math.Log2(float64(len(m)))
- }
|