• Non ci sono risultati.

Capitolo 2 LogLog Counting

N/A
N/A
Protected

Academic year: 2021

Condividi "Capitolo 2 LogLog Counting"

Copied!
17
0
0

Testo completo

(1)

Capitolo 2

LogLog Counting

Il LogLog counting è un algoritmo probabilistico proposto in [1] e serve in generale a stimare la cardinalità di un insieme di dati, ovvero il numero di elementi distinti che lo compongono. Un esempio di applicazione può essere andare a stimare, con un errore relativo lieve e occupando poca memoria, il numero di parole diverse che compaiono in tutto il complesso delle opere di Shakespeare.

L’algoritmo LOGLOG riesce a svolgere la sua funzione sfruttando solo una piccola quantità di memoria aggiuntiva, all’incirca loglogNmax bit, con Nmax pari al limite superiore

delle cardinalità che questa tecnica riesce a stimare; il nome stesso dell’algoritmo deriva da questa caratteristica. Le proprietà di questo metodo sono che la stima della cardinalità è asintoticamente non polarizzata, e che, poiché l’algoritmo opera in modo incrementale, esso può essere applicato a flussi che richiedono una stima da realizzare on-line, timebin dopo timebin.

(2)

Per rendere casuali i dati, cioè fare in modo che abbiano caratteristiche di uniformità e indipendenza, si utilizza una funzione hash, ed è sul dataset ottenuto in uscita dalla funzione hash che si valuta la cardinalità; inoltre la stima finale è totalmente indipendente dalla natura e dall'ordine dei dati, sui quali non è necessaria nessuna informazione. In particolare, poiché non richiede assunzioni sulle caratteristiche statistiche dei dati, l’algoritmo rivela una natura general purpose.

2.1 L’algoritmo LogLog di base

Dato un multiset M di dati, appartenenti a un universo discreto U, supponiamo di volerne stimare la cardinalità.

Si assuma di avere a disposizione una funzione hash h che traduca gli elementi di U in stringhe x binarie sufficientemente lunghe, in modo che i bit che compongono i valori ottenuti dalle funzioni hash somiglino molto a bit casuali distribuiti uniformemente: in questo senso, M sarà il multiset ideale (random) ottenibile tramite tale trasformazione.

Per semplicità assumiamo inizialmente che le stringhe siano infinitamente lunghe, cioè U={0,1}, l'idea di base è

(3)

iniziale delle stringhe, ottenute in uscita dalla funzione hash h. Si definisce quindi la funzione ρ(x), come la posizione del primo bit settato a 1 nel valore x restituito dal calcolo della funzione hash, ad esempio ρ(1...)=1, ρ(001...)=3, ecc. Sulla base delle ipotesi fatte ci si aspetta che circa n 2/ k elementi

distinti di M avranno un valore della funzione ρ pari a k. Quindi, la quantità

 

M

 

x R M x  max (1)

può essere considerata una stima approssimata del valore di n

2

log ; inoltre, a causa della presenza dell’operazione di

massimizzazione, R sarà completamente indipendente da eventuali duplicati all'interno del multiset M e dall'ordine di presentazione delle stringhe. È possibile osservare un esempio di applicazione della formula (1) in figura 4: all’ingresso dell’elemento i, il LogLog Counter è aggiornato prendendo il massimo tra i valori relativi all'uscita dell’elemento i-1 e l’elemento i, producendo in questo modo un valore che dovrà essere confrontato con quello legato all’elemento i+1.

(4)

Figura 4. Esempio di aggiornamento di un LogLog Counter, secondo la formula (1).

In particolare, in [1] gli autori hanno valutato che la formula di R stima “logaritmicamente” n all’interno di ±1.87 ordini di grandezza binari, poiché la deviazione standard associata allo stimatore è di 1.87; inoltre la polarizzazione, di tipo additivo, vale 1.33.

Per migliorare la stima di R, piuttosto che usare un LogLog Counter unico, lo si divide in m=2 gruppi e si k considerano i k bit più significativi del valore in uscita dalla funzione hash come indice del sottoblocco in binario (ciò significa raggruppare gli elementi in modo che quelli che iniziano ad esempio con 001 cadranno nel sottogruppo 1, se m=8). ρ(x), invece, si calcolerà adesso come la posizione del

(5)

primo bit diverso da 0 a partire dal bit k+1; pertanto si indicherà questa nuova funzione con la notazione ρk(x).

Di conseguenza, la stima R(j) per ogni sottogruppo j(con j=0,2,...,m-1) vale  

 

x ρ = R k j x j  max (2)

Se si effettua la media aritmetica sugli m sottogruppi

 

m = j j R m 1 1 (3)

ci si aspetta che questo valore corrisponde a log2n /m più una polarizzazione additiva, dove n è la cardinalità dell’insieme. Allora, la stima di n secondo l’algoritmo LogLog è

 

j m R m 1 m2 α = F (4)

dove αm è il fattore di correzione della polarizzazione nel limite

asintotico, e può essere valutato in questo modo:

m m m= Γ m α           log2 1 2 / 1 / 1 (5)

 

  0 1 dt t e s = s Γ t s . (6)

(6)

In figura 5 è mostrato l'uso pratico dei LogLog Counter: viene usata la prima parte della funzione Hdw per selezionare il

sottogruppo e la seconda per incrementarlo; alla fine si applica la formula (4).

Figura 5. Esempio di applicazione della formula (4), che stima la cardinalità.

In conclusione, i passi da effettuare per implementare l’algoritmo LOGLOG,nell’ipotesi che M sia il set dei valori in uscita dalle funzioni hash e m=2k, sono:

(7)

o per x=b1b2...m

o assegnare a j il valore dei primi k bit di x in base 2

o indicare con ρk(x) la posizione del primo bit

settato a 1 in x a partire da sinistra, dopo aver scartato i k bit più significativi;

o impostare R(j)= max(R(j), ρk(x)); o ritornare  

j m R m 1 m2 α = F

Le caratteristiche principali dell'algoritmo possono essere riassunte attraverso il seguente teorema, dove E indica l’aspettazione e V la varianza.

Teorema 1. Consideriamo l'algoritmo di base LogLog,

applicato a un multiset ideale di cardinalità n (non nota) e sia F il valore stimato della cardinalità restituito dall'algoritmo.

o La stima F è asintoticamente non polarizzata, cioè per   n , 1Ε

 

F =1 +o

 

1 n n 1,n , con

 

6 1, 10  < θ n .

(8)

o L’errore standard, definito come V

 

F n n 1 , per n  tende al valore +o( ) m β n 2, m 1 , con

 

6 2, 10  < θ n . Nota: β128 =1.30540, β1024 =1.29897, 1.29806 6 1 2 log 12 1 2 2 = π + = β .

Dimostrazione. Consideriamo la variabile

 

j m M 2 1 m2 = α F =

Z / , che è la versione non normalizzata dello stimatore F. Per le relazioni di convoluzione multinomiale relative alle potenze m-esime delle funzioni generatrici, il valore atteso e la varianza di Z sono rispettivamente

 

 

m m n n , m z G z mn! = Z Ε       1/ 2 e

 

 

 

2 / 1 / 2 2 2                            n n m m m m n 2 n , m z G z ! m , m z G z n! m = Z V ,

dove con l’espressione

 

zn f

 

z si rappresenta il coefficiente zn nella serie di potenze f(z) e con G(z,u) si indica la funzione generatrice della famiglia delle distribuzioni di probabilità di

(9)

una variabile aleatoria che corrisponde al massimo di t variabili aleatorie indipendenti e distribuite geometricamente .

La dimostrazione del teorema 1 consiste nello stimare asintoticamente le quantità Εn

 

Z e Vn

 

Z .

Per semplificare, supponiamo di poissonizzare il problema del calcolo del valore atteso ε e della varianza n ν , n in modo da utilizzare le proprietà della trasformata di Mellin, utilizzando per queste approssimazioni la notazione ε e n ν . n

Sfruttando infatti le caratteristiche del modello

poissoniano, si ha che n m m n , e m n mG = ε        1/ 2 e 2 / 1 / 2 2 2                             n m m n n m m 2 n , e m n G m e , m n G m = ν quando

la cardinalità dell’insieme rispetta una legge di Poisson con rate λ=n. Per n, ε Γ

m

+δn n m m n                    log2 1 2 / 1 / 1 e

2 2m / 1 / 2 log2 1 2 / 1 log2 1 2 / 2 m Γ m n Γ ν n m m m n                           

(10)

La trasformata di Mellin per una funzione reale f(x) è definita come la funzione complessa f

 

s =

f

 

t ts 1dt, ed è tale che

(i) c’è una corrispondenza tra le proprietà asintotiche della funzione originaria f e le singolarità della trasformata f*;

(ii) le somme armoniche definite come

λf

 

μx si possono fattorizzare come

λμs

f

 

s .

È possibile quindi riscrivere il valor medio e la varianza come εn =mA

 

n m e 2

 

m

2 n

n+ε =m B n

ν , dove A(x) e B(x)

sono le somme armoniche

 

i m

i+

 

i

x x = x A 2 / /2 1 /2 

,

 

m

i+

 

i

x x = x B

22i/ /2 1  /2 con

 

x =ex/m, che ha come trasformata

 

s =msΓ

 

s ; di conseguenza

 

 

s

m s s = s A 2 2 1 1 1 2 1/     e

 

 

s

m s s = s B 2 2 1 1 1 2 21/     .

Allora, il contributo asintotico principale di A è dovuto alla singolarità posta sull’asse reale, per cui, vicino a s=1/m

(11)

si ha

 

m + s a s A / 1    con

log2 1 2 / 1 / 1 /     m m 1 m Γ m = a ,

mentre le altre singolarità producono un contributo asintotico molto piccolo. Quindi, il valore εn =mA

 

n m coincide asintoticamente con mamn+δnn dove δ è una fluttuazione di n ampiezza minore di 10-6.

Per quanto riguarda la varianza, il polo principale è m

=

s 2/ , cosa che determina

 

2 + s b s B   con

log2 1 2 / 2 / 2 /     m m 2 m Γ m = b . Il contributo di questa

singolarità a B(x) è quindi bx2/m: trascurando le fluttuazioni piccole, per le proprietà della trasformata di Mellin si ha

m 2 bx = B(x) / .

I primi due momenti dello stimatore LOGLOG, grazie al Lemma di Depoissonizazione illustrato in [7], sotto l’ipotesi di modello di Poisson e quello reale risultano asintoticamente equivalenti, cioè Εn

 

Zεn e Vn

 

Zνn .

Lo stimatore non normalizzato Z cresce come n /αm per quanto detto finora; quindi lo stimatore normalizzato F è

(12)

sotto ipotesi di fluttuazioni trascurabili, tende asintoticamente a 1 2m   a

bm . La quantità mostrata è esattamente βm/ m nella notazione del teorema 1.□

In conclusione, il teorema 1 dichiara che, trascurando le piccole fluttuazioni, di ampiezza minore di 10-6, l’algoritmo fornisce una stima asintoticamente valida del valore della cardinalità. L’errore standard, che misura in senso quadratico medio la deviazione che ci si aspetta, è ben approssimato dalla formula

Standard error m

=1.30. (7)

Scegliendo m=1024 e m=2048 si otterrà un errore standard rispettivamente del 4% e del 3%.

Inoltre, m + α αm 48 2 log 2π2 2   , dove 0.39701 2 2 = e = αγ e γ è la costante di Eulero.

Notare che, per giungere a una stima sufficientemente accurata, sarà necessario scegliere un valore di m>> 1.

(13)

Finora, si è ipotizzato di impiegare per ogni gruppo j un registro R(j) che memorizza numeri interi di valore potenzialmente illimitato, tuttavia questa era soltanto una semplificazione. Definiamo allora un algoritmo l-limitato, tale che i registri R(j) siano memorizzati su l bit, ovvero ogni registro possa rappresentare un numero intero compreso tra 0 e

1

2 l invece che qualsiasi .

Teorema 2. Sia ω

 

n una funzione che tende a infinito molto lentamente, e si consideri la funzione

 

 

n m n = n l       2 2log

log . Allora, l’algoritmo l(n)-limitato e l’algoritmo LOGLOG forniscono lo stesso risultato con

probabilità che tende a 1 per n che tende a infinito.

Dimostrazione. A causa delle proprietà standard delle distribuzioni multinomiali, la probabilità che un qualsiasi bucket contenga più di 2n/m elementi è esponenzialmente piccola; tali casi possono quindi essere scartati. Allora, la probabilità che un qualsiasi bucket abbia un valore M del registro che superi k è

1

12k

2n/m

. Di conseguenza, la probabilità globale di fallimento è limitata superiormente dalla

(14)

approssimata dal valore  1 2 2 4m 2 4n + n ω l m n =          . Quindi, la

probabilità di fallimento diminuisce più velocemente rispetto alla potenza di n. □

Ogni registro è formato da m interi su l(n) bit, e la quantità di memoria necessaria all’algoritmo per stimare le cardinalità fino a n è log 2log2

1+o

 

1

m n m       ; la funzione hash h deve convertire i valori dall’universo di dati originario a esattamente l n + m

2

log

2 bit. Come ci si può aspettare, inoltre, questa seconda versione dell'algoritmo funziona correttamente per ogni n'  . n

Ad esempio, se lo scopo è contare le cardinalità al massimo fino a n=227, si può usare m=1024, per ottenere un errore del 4% circa, in base alla formula (7) del teorema 1. Allora, si accede a ogni gruppo circa n/m=217 volte, e quindi log2log2 217=4.09. Se ogni registro ha dimensione l=5 bit,

ovvero w=0.91, si ottiene che la limitazione a l ha una incidenza così piccola che la probabilità di discrepanza tra le due versioni dell’algoritmo è minore del 12%.

(15)

standard del 4% occupando soltanto 1024 registri di 5 bit, cioè in totale una tabella di 640 byte.

(16)
(17)

Figura

Figura 4. Esempio di aggiornamento di un LogLog Counter,  secondo la formula (1).
Figura 5. Esempio di applicazione della formula (4), che stima la  cardinalità.

Riferimenti

Documenti correlati

I protocolli per la condivisione dei file possono anche essere utilizzati come protocolli per il trasferimento dei file, ma principalmente consentono di usare un file come se

Per fortuna l’informatore decide di aiutare ancora l’ispettore fornendogli indizi proprio attraverso il computer. Il numero

Finalmente arrivano informazioni sul complice della Signora Violet, l’abilissima ladra arrestata da Numerik.. Gli indizi sono contenuti in una busta chiusa: l’ispettore Numerik la

 Impostare Studente.corsoLaurea = nome; è corretto (metodo statico, campo statico)... Metodi statici privati.  A volte un

Di fatti, l’elezione diretta del Sindaco introduce una fortissima innovazione nella gestione amministrativa degli enti locali e presto, questa nuova figura, si rivelerà essere

Le presenza in questo periodo rispecchiano abbastanza l’andamento degli arrivi, perciò presenze in costante aumento per quanto riguarda gli italiani, anche se con

Proprio l’apertura di uno shop di proprietà rappresenta un passo di grande importanza per Fantoni, che inaugura una nuova fase di sviluppo in cui un ruolo fondamentale sarà

questi viene corretto della parte rilassata durante la fase di carico, secondo la correzione già operata per il modulo elastico al paragrafo 3.3.4 e come indicato