Zaimplementowałem następującą funkcję do obliczania entropii:
from math import log
def calc_entropy(probs):
my_sum = 0
for p in probs:
if p > 0:
my_sum += p * log(p, 2)
return - my_sum
Wynik:
>>> calc_entropy([1/7.0, 1/7.0, 5/7.0])
1.1488348542809168
>>> from scipy.stats import entropy # using a built-in package
# give the same answer
>>> entropy([1/7.0, 1/7.0, 5/7.0], base=2)
1.1488348542809166
Zrozumiałem, że entropia zawiera się między 0 a 1, 0 oznacza bardzo pewny, a 1 oznacza bardzo niepewny. Dlaczego otrzymuję miarę entropii większą niż 1?
Wiem, że jeśli zwiększę rozmiar podstawy logu, miara entropii będzie mniejsza, ale myślałem, że baza 2 jest standardowa, więc nie sądzę, że to jest problem.
Muszę przegapić coś oczywistego, ale co?
mathematical-statistics
python
entropy
Akavall
źródło
źródło
Odpowiedzi:
Entropia to nie to samo, co prawdopodobieństwo .
Entropia mierzy „informację” lub „niepewność” zmiennej losowej. Gdy używasz podstawy 2, jest ona mierzona w bitach; a zmienna może zawierać więcej niż jeden bit informacji.
W tym przykładzie jedna próbka „zawiera” około 1,15 bitów informacji. Innymi słowy, gdybyś był w stanie idealnie skompresować serię próbek, potrzebowałbyś średnio tyle bitów na próbkę.
źródło
Maksymalna wartość entropii wynosilogk , gdzie k to liczba używanych kategorii. Jego wartość liczbowa będzie naturalnie zależeć od podstawy używanych logarytmów.
Wykorzystując logarytmy podstawowe 2 jako przykład, jak w pytaniu:log2)1 jest 0 i log2)2) jest 1 , więc wynik jest większy niż 1 jest zdecydowanie błędny, jeśli liczba kategorii wynosi 1 lub 2) . Wartość większa niż1 będzie źle, jeśli przekroczy log2)k .
W związku z tym dość często skaluje się entropię wedługlogk , więc wyniki mieszczą się między 0 i 1 ,
źródło
Spróbuj tego (zwróć uwagę na bazęmi ):
Dający:
źródło