Fix 04
19
wyk/04_Entropia.ipynb
Normal file
@ -1,4 +1,4 @@
|
|||||||
** Entropia
|
* Entropia
|
||||||
|
|
||||||
*Entropia* ($E$) to miara nieuporządkowania, niepewności, niewiedzy. Im
|
*Entropia* ($E$) to miara nieuporządkowania, niepewności, niewiedzy. Im
|
||||||
większa entropia, tym mniej wiemy. Pojęcie to pierwotnie wywodzi się z
|
większa entropia, tym mniej wiemy. Pojęcie to pierwotnie wywodzi się z
|
||||||
@ -11,12 +11,12 @@ W termodynamice entropia jest miarą nieuporządkowania układów
|
|||||||
fizycznych, na przykład pojemników z gazem. Przykładowo, wyobraźmy
|
fizycznych, na przykład pojemników z gazem. Przykładowo, wyobraźmy
|
||||||
sobie dwa pojemniki z gazem, w którym panuje różne temperatury.
|
sobie dwa pojemniki z gazem, w którym panuje różne temperatury.
|
||||||
|
|
||||||
[[./03_Entropia/gas-low-entropy.drawio.png]]
|
[[./04_Entropia/gas-low-entropy.drawio.png]]
|
||||||
|
|
||||||
Jeśli usuniemy przegrodę między pojemnikami, temperatura się wyrówna,
|
Jeśli usuniemy przegrodę między pojemnikami, temperatura się wyrówna,
|
||||||
a uporządkowanie się zmniejszy.
|
a uporządkowanie się zmniejszy.
|
||||||
|
|
||||||
[[./03_Entropia/gas-high-entropy.drawio.png]]
|
[[./04_Entropia/gas-high-entropy.drawio.png]]
|
||||||
|
|
||||||
Innymi słowy, zwiększy się stopień nieuporządkowania układu, czyli właśnie entropia.
|
Innymi słowy, zwiększy się stopień nieuporządkowania układu, czyli właśnie entropia.
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ losowania do odbiorcy $O$ używając zer i jedynek (bitów).
|
|||||||
Teorioinformacyjną entropię można zdefiniować jako średnią liczbę
|
Teorioinformacyjną entropię można zdefiniować jako średnią liczbę
|
||||||
bitów wymaganych do przesłania komunikatu.
|
bitów wymaganych do przesłania komunikatu.
|
||||||
|
|
||||||
[[./03_Entropia/communication.drawio.png]]
|
[[./04_Entropia/communication.drawio.png]]
|
||||||
|
|
||||||
*** Obliczanie entropii — proste przykłady
|
*** Obliczanie entropii — proste przykłady
|
||||||
|
|
||||||
@ -145,7 +145,7 @@ optymalne kodowanie wyników rzutu taką kostką?
|
|||||||
|
|
||||||
Wiemy już, że entropia dla rzutu monetą wynosi 1 bit. A jaki będzie wynik dla źle wyważonej monety?
|
Wiemy już, że entropia dla rzutu monetą wynosi 1 bit. A jaki będzie wynik dla źle wyważonej monety?
|
||||||
|
|
||||||
#+BEGIN_SRC python :session mysession :results file
|
#+BEGIN_SRC ipython :session mysession :results file
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
from math import log
|
from math import log
|
||||||
import numpy as np
|
import numpy as np
|
||||||
@ -160,7 +160,7 @@ Wiemy już, że entropia dla rzutu monetą wynosi 1 bit. A jaki będzie wynik dl
|
|||||||
plt.ylabel('entropia')
|
plt.ylabel('entropia')
|
||||||
plt.plot(x, y)
|
plt.plot(x, y)
|
||||||
|
|
||||||
fname = f'03_Entropia/binomial-entropy.png'
|
fname = f'04_Entropia/binomial-entropy.png'
|
||||||
|
|
||||||
plt.savefig(fname)
|
plt.savefig(fname)
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ Wiemy już, że entropia dla rzutu monetą wynosi 1 bit. A jaki będzie wynik dl
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:03_Entropia/binomial-entropy.png]]
|
[[file:04_Entropia/binomial-entropy.png]]
|
||||||
|
|
||||||
*Pytanie* Dla oszukańczej monety (np. dla której wypada zawsze orzeł) entropia
|
*Pytanie* Dla oszukańczej monety (np. dla której wypada zawsze orzeł) entropia
|
||||||
wynosi 0, czy to wynik zgodny z intuicją?
|
wynosi 0, czy to wynik zgodny z intuicją?
|
||||||
@ -187,7 +187,7 @@ Załóżmy, że chcemy zmierzyć entropię języka polskiego na przykładzie
|
|||||||
„Pana Tadeusza” — na poziomie znaków. W pierwszym przybliżeniu można
|
„Pana Tadeusza” — na poziomie znaków. W pierwszym przybliżeniu można
|
||||||
by policzyć liczbę wszystkich znaków…
|
by policzyć liczbę wszystkich znaków…
|
||||||
|
|
||||||
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
|
#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
|
||||||
import requests
|
import requests
|
||||||
from itertools import islice
|
from itertools import islice
|
||||||
|
|
||||||
@ -206,7 +206,7 @@ by policzyć liczbę wszystkich znaków…
|
|||||||
:end:
|
:end:
|
||||||
|
|
||||||
|
|
||||||
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
|
#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
|
||||||
chars_in_pan_tadeusz = len(set(get_characters(pan_tadeusz)))
|
chars_in_pan_tadeusz = len(set(get_characters(pan_tadeusz)))
|
||||||
chars_in_pan_tadeusz
|
chars_in_pan_tadeusz
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
@ -218,7 +218,7 @@ by policzyć liczbę wszystkich znaków…
|
|||||||
|
|
||||||
… założyć jednostajny rozkład prawdopodobieństwa i w ten sposób policzyć entropię:
|
… założyć jednostajny rozkład prawdopodobieństwa i w ten sposób policzyć entropię:
|
||||||
|
|
||||||
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
|
#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
|
||||||
from math import log
|
from math import log
|
||||||
|
|
||||||
95 * (1/95) * log(95, 2)
|
95 * (1/95) * log(95, 2)
|
||||||
@ -238,7 +238,7 @@ znaków, można opracować o wiele efektywniejszy sposób zakodowania znaków sk
|
|||||||
|
|
||||||
Policzmy entropię przy takim założeniu:
|
Policzmy entropię przy takim założeniu:
|
||||||
|
|
||||||
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
|
#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
from math import log
|
from math import log
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ Policzmy entropię przy takim założeniu:
|
|||||||
|
|
||||||
*** Ile wynosi entropia rękopisu Wojnicza?
|
*** Ile wynosi entropia rękopisu Wojnicza?
|
||||||
|
|
||||||
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
|
#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
|
||||||
import requests
|
import requests
|
||||||
import re
|
import re
|
||||||
|
|
||||||
@ -284,7 +284,7 @@ Policzmy entropię przy takim założeniu:
|
|||||||
:end:
|
:end:
|
||||||
|
|
||||||
|
|
||||||
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
|
#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
|
||||||
unigram_entropy(get_characters(voynich))
|
unigram_entropy(get_characters(voynich))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
@ -313,7 +313,7 @@ Celem algorytmów kompresji jest właściwie wyznaczanie efektywnych
|
|||||||
sposobów kodowania danych. Możemy więc użyć rozmiaru skompresowanego pliku w bitach
|
sposobów kodowania danych. Możemy więc użyć rozmiaru skompresowanego pliku w bitach
|
||||||
(po podzieleniu przez oryginalną długość) jako dobrego przybliżenia entropii.
|
(po podzieleniu przez oryginalną długość) jako dobrego przybliżenia entropii.
|
||||||
|
|
||||||
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
|
#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
|
||||||
import zlib
|
import zlib
|
||||||
|
|
||||||
def entropy_by_compression(t):
|
def entropy_by_compression(t):
|
||||||
@ -330,7 +330,7 @@ sposobów kodowania danych. Możemy więc użyć rozmiaru skompresowanego pliku
|
|||||||
|
|
||||||
Dla porównania wynik dla rękopisu Wojnicza:
|
Dla porównania wynik dla rękopisu Wojnicza:
|
||||||
|
|
||||||
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
|
#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
|
||||||
entropy_by_compression(voynich)
|
entropy_by_compression(voynich)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |