This commit is contained in:
Filip Gralinski 2022-07-06 09:11:14 +02:00
parent c33599c719
commit 8324f62166
10 changed files with 34 additions and 672 deletions

File diff suppressed because one or more lines are too long

19
wyk/04_Entropia.ipynb Normal file

File diff suppressed because one or more lines are too long

View 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

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB