03.06.2013 Views

Un modello integrato control-flow e data-flow per il rilevamento ...

Un modello integrato control-flow e data-flow per il rilevamento ...

Un modello integrato control-flow e data-flow per il rilevamento ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

20 2. Modelli <strong>per</strong> l’anomaly detection<br />

Nello pseudocodice R è la relazione che si vuole apprendere, che potrebbe essere<br />

equals, elementOf, inRange, ... La relazione appresa dipende sostanzialmente<br />

da cosa restituisce lookup() nel primo passo: questa chiamata infatti ha <strong>il</strong> compito<br />

di restituire tutti i nomi dei parametri precedentemente visti che avevano valore in<br />

relazione con V . Ad esempio:<br />

Esempio 1 (lookup) Si è osservata:<br />

• la traccia (X = 5); (Y = 6); (Z = 5); (W = 4); (Q = 5) e si sta processan-<br />

do l’evento P = 5. Si vuole imparare la relazione equals, quindi lookup(5)<br />

restituisce {X, Z, Q}.<br />

• la traccia (X = /a/b/c); (Y = /a/b); (Z = /zz); (W = /a/b/c/d) e si sta<br />

processando l’evento Q = /a. Si vuole apprendere la relazione isWithinDir,<br />

quindi lookup() dovrà restituire {X, Y, W }<br />

Prima di proseguire dobbiamo notare che in questo modo si apprende la R esclusi-<br />

vamente rispetto ad un preciso punto di una traccia. Quello che invece si vuole è<br />

apprendere qualcosa che sia valido lungo tutta la traccia, ovvero RT . Quindi, se R<br />

è la relazione che si vuole apprendere, è necessario definire <strong>il</strong> suo lifting RT su una<br />

traccia. Quello che l’algoritmo apprenderà sarà proprio RT (RT se applicato a più<br />

tracce).<br />

Definizione 6 (Lifting di una relazione R su una traccia) Sia <strong>data</strong> una rela-<br />

zione R tra due argomenti X e Y . Scriviamo X RT Y se e solo se <strong>per</strong> ogni oc-<br />

correnza di X e l’occorrenza di Y immediatamente precedente vale X R Y . Sia T<br />

l’insieme di tutte le tracce osservate: se ∀T ∈ T : X RT Y allora X RT Y .<br />

Nel secondo passo CurRels tiene traccia della RT finora appresa e, intersecando<br />

con <strong>il</strong> risultato di lookup() vengono scartati tutti quei parametri <strong>per</strong> i quali non vale<br />

più R. Nel terzo passo NewArgs(X) è una funzione che restituisce tutti gli eventi<br />

che compaiono <strong>per</strong> la prima volta dopo la precedente occorrenza di X e, intersecando<br />

<strong>il</strong> suo risultato con Y, si possono identificare i nuovi eventi che si trovano in relazione<br />

con X, <strong>per</strong> poi aggiungerli a CurRels al passo successivo.<br />

Esempio 2 (NewArgs) Sia <strong>data</strong> la sequenza di eventi<br />

A,B,C,D,B,E,C,F,D,A,...<br />

• NewArgs(B) è {A} <strong>per</strong> la prima occorrenza di B, è {C, D} <strong>per</strong> la seconda

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!