entropy.go 308 B

12345678910111213141516171819
  1. package mathx
  2. import "math"
  3. func CalcEntropy(m map[interface{}]int) float64 {
  4. var entropy float64
  5. var total int
  6. for _, v := range m {
  7. total += v
  8. }
  9. for _, v := range m {
  10. proba := float64(v) / float64(total)
  11. entropy -= proba * math.Log2(proba)
  12. }
  13. return entropy / math.Log2(float64(len(m)))
  14. }