larunbata, uztaila 03, 2021

Berridátziz atzoko "TEnt" funtzioa an R erábiliz "Entropy" funtzioa ("DescTools")

Atzo emán genuén R funtzio(txo) bat non lotzen dirén Shannon-en entropia eta Zipf-en legea afin kalkulatu corpus linguistiko baten entropia teorikoa:

Horrela, defini geinke (an R softwarea) ondorengo funtzioa ki kalkulatu a entropia teorikoa e corpus linguistiko bat non perfektuki (teorikoki ere) betetzen den Zipf-en legea ("TEnt" dá hainbeste nola " Theoretical Entropy"):

TEnt <- function(n){sum((1/(sum(1/(1:n))*(1:n))*log2(1/(1/(sum(1/(1:n))*(1:n))))))} 

non "n" parametro bakarra dago, zeintan aplikatuko dugú edozein kopuru e hitz ezberdinak, hala nola n = 29899:

TEnt(29899)

zeinen emaitza izanen dá goragoko entropia teorikoa (Ulisses): 

10.47395
Horretarako, soilik jakin behar dugu zénbat hitz ezberdin agertzen diren an corpusa: Zipf-en legeak determinatzen du beste guztia.

Genioenez, funtzio horrek korritzen du an R softwarea, zein doan deskarka liteke an gune hau. Behin R instalatuta, korritu beharko da funtzioa bera afin gero kalkulatú a entropia teorikoa zein dago ki edozein "n", adibidez "n = 10000":

TEnt(10000)

zeini programak erantzunen dió:

9.532297

zein, dakigunez, dén a entropia teorikoa zein dago ki corpus linguistiko bat kin 10000 hitz diferente.

Bestalde, R-n programatuta aurkitzen dirá hainbat funtzio, eta bádira paketeak non kalkula daiteke Shannon-en entropia ("DescTools" edo "Entropy"), non aurkitzen dugu ondorengo aukera ("DescTools"):


 eta non irakurtzen dugú azalpen hau ("DescTools"):

The Shannon entropy equation provides a way to estimate the average minimum number of bits needed to encode a string of symbols, based on the frequency of the symbols. It is given by the formula \(H = - \sum(\pi log(\pi))\) where \(\pi\) is the probability of character number i showing up in a stream of characters of the given "script". The entropy is ranging from 0 to Inf.

"Entropy" funtzio hori erabiltzeko, aurrena kargatu behar da "DescTools" paketea (gure atzoko funtzioa erabiltzeko ez da ezer deskargatu behar, salbu R programa), eta, adibidez, hari emanez probabilitate-sorta oso bat (demagun 0.5 eta 0.5, bidez kodeá: c(0.5,0.5)), programak emanen digu haren entropia teorikoa (baita eman geneioke maiztasun absolutuak edota balio ez-numerikoak nola hitzen zerrenda bat, eta programak automatikoki kalkulatuko ditú euren probabilitateak):

Entropy(c(0.5,0.5)) = 1

Gure kasuan, berdefini geinke gure funtzioa erábiliz "Entropy" funtzioa, honela:

TEnt<- function(n){Entropy((1/((sum(1/(1:n)))*(1:n))))}

non (1/((sum(1/(1:n)))*(1:n)))) zati horrek adierazten du hóri probabilitate-sorta zeinen entropia teorikoa kalkulatu nahi dugun:

TEnt(10000) = 9.532297
zein dén atzoko ber funtzioa baina orain erábiliz "Entropy" funtzioa ("DescTools"). []