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
|
||||
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
|
||||
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,
|
||||
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.
|
||||
|
||||
@ -46,7 +46,7 @@ losowania do odbiorcy $O$ używając zer i jedynek (bitów).
|
||||
Teorioinformacyjną entropię można zdefiniować jako średnią liczbę
|
||||
bitów wymaganych do przesłania komunikatu.
|
||||
|
||||
[[./03_Entropia/communication.drawio.png]]
|
||||
[[./04_Entropia/communication.drawio.png]]
|
||||
|
||||
*** 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?
|
||||
|
||||
#+BEGIN_SRC python :session mysession :results file
|
||||
#+BEGIN_SRC ipython :session mysession :results file
|
||||
import matplotlib.pyplot as plt
|
||||
from math import log
|
||||
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.plot(x, y)
|
||||
|
||||
fname = f'03_Entropia/binomial-entropy.png'
|
||||
fname = f'04_Entropia/binomial-entropy.png'
|
||||
|
||||
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
|
||||
|
||||
#+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
|
||||
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
|
||||
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
|
||||
from itertools import islice
|
||||
|
||||
@ -206,7 +206,7 @@ by policzyć liczbę wszystkich znaków…
|
||||
: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
|
||||
#+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ę:
|
||||
|
||||
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
|
||||
#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
|
||||
from math import log
|
||||
|
||||
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:
|
||||
|
||||
#+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 math import log
|
||||
|
||||
@ -260,7 +260,7 @@ Policzmy entropię przy takim założeniu:
|
||||
|
||||
*** 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 re
|
||||
|
||||
@ -284,7 +284,7 @@ Policzmy entropię przy takim założeniu:
|
||||
: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))
|
||||
#+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
|
||||
(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
|
||||
|
||||
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:
|
||||
|
||||
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
|
||||
#+BEGIN_SRC ipython :session mysession :exports both :results raw drawer
|
||||
entropy_by_compression(voynich)
|
||||
#+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 |