[Python] Aiuto per testi su machine learning e graph clustering

Antonio Piepoli piepoli.antonio a gmail.com
Lun 4 Giu 2012 14:59:02 CEST


Chiedo scusa se rispondo solo ora ma ammetto di non aver controllato questa
mail in questi giorni :P .


Rispondo subito ad Enrico che mi accusa ( :D ) di fare statistica. Io qui
sono venuto per fare una testi in sicurezza, avrei voluto occuparmi di reti
protocolli etc etc ... invece sono finito a fare privacy. L'argomento non
mi dispiace e devo dire che il lavoro mi sta appassionando, il problema
però è che essendo senza guida ho molta paura di commettere errori
grossolani e di fare quindi un lavoro sbagliato.


Adesso vi contestualizzo un pò di più il problema.
Esistono nuovi sistemi, chiamati Identity managment systems, che appunto
dovrebbero garantire la gestione di una identità digitale in maniera da
preservare la privacy dell'utilizzatore.

es. ci rechiamo in una enoteca per comprare del vino. Possiamo comprare del
vino solo se abbiamo più di 18 anni. Quindi la procedura sarebbe quella di
mostrare una PROVA (carta d'identità) che ci viene rilasciata da un
Identity provider (il nostro stato). Quindi il negoziante diventa un
SERVICE PROVIDER ed è contro di loro che noi vogliamo preservare la
privacy. Perchè il senso è che lui ha bisogno solo di sapere se siamo
maggiorenni ed invece noi stiamo dischiudendo tutte le nostre informazioni
personali. Quindi una pratica diffusa nel progetto di Identity managment
systems è quella del "data minimization" ovvero io dischiudo solo le
informazioni che il service provider necesita, in questo caso l'anno di
nascita opportunamente firmato dall'identity provider.

Quindi la domanda che il mio professore mi ha posto la prima volta che ci
siamo incontrati è stata: Cosa succede se tanti service providers (diversi)
mettono insieme le informazioni parziali che hanno su una identità?
Riescono a linkarle ?


Bene quindi lo scenario come l'ho immaginato io è :

Considero un solo identity provider che gestice la nostra identità sotto
forma di tupla.
Le informazioni parziali che ogni serive provider avrà non sono altro che
un sottoinsieme di questa tupla.

ok quella era solo una nota di colore...

adesso tornando ai dettagli tecnici..

ripeto... non essendo esperto di machine learning ho scelto SVM perchè mi
sembrava mooooolto semplice....

l'ho incontrata per caso navigando in http://mlpy.sourceforge.net/ ed era
una dei pochi modelli ad avere un metodo pred_probability() -> bellissimo.
Ovviamente poi ho approfondito i miei studi su SVM e devo dire che quasi
quasi ho capito di cosa si tratta :D.

Quindi se c'è qualcuno che ne capisce qualcosina di machine learning magari
potrebbe dare qualche suggerimento :P.

Enrico tu per esempio perchè dici che SVM non va bene? Io sto parlando di
SVM con kernel esponenziale.

Leggendo http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf il documento
ufficiale di Libsvm alla voce Probabilità è spiegato come ottengono la
probabilità condizionata, che nel mio caso sarebbe p(match | pattern di
metriche).

Il problema dei vettori di training è molto importante. Li sto generando
artificialmente con questo software

http://adatagenerator.sourceforge.net/cdc-tutorial/index.html

che dovrebbe prendere in input un database (anche lui artificiale
http://www.generatedata.com/ ) e basandosi su alcune "regole di errore"
generare coppie di tuple ed etichettarle come match o unmatch.


Quindi concludendo ... genero i dati -> genero set di training ->
parserizzo le coppie di record etichettate in vettori di numeri (con le
metriche) -> faccio il training del modello SVM -> potrò chidere al
modello: questo pattern (1,1,0.9,0,2,1,0) con che probabilità corrisponde a
due stessi record?????? e lui mi dirà 0.7 !


Fatemi sapere se tutto questo vi sembra ragionevole o è pura follia perchè
c'è ancora un problema che sto cercando di risolvere in relazione a questa
fase qui...

Per la fase "graph clustering" forse la situazione è più rosea...

http://perso.crans.org/aynaud/communities/index.html

algoritmo basato su networkx del metodo louvain che altro non è che
un'imprementazione greedy dell'algoritmo di Newman su grafi pesati
(ovviamente). Ho fatto qualche piccola prova ad utilizzare grafi
"ragionevolmente" prodotti dalla fase 1 e devo dire che si comporta come mi
aspettavo (raggruppa nodi collegati con pesi elevati)... tra qualche
tempo,magari, vi mando uno screenshot per avere un'idea.


Grazie 1000 per le opinioni e per il supporto


ps. Sono ad Eindhoven ed oggi la temperatura è 1/3 rispetto a quella del
mio paese (Bari) :(





























Il giorno 01 giugno 2012 09:12, Marco De Paoli <depaolim a gmail.com> ha
scritto:

>
>
> Il giorno 31 maggio 2012 22:49, Diego Barrera <diegonebarrera a yahoo.it>ha scritto:
>
> Io ho risolto in questo modo:
>> -prendo ciascun campo e mi ricavo lo slug;
>> -trovo la sottostringa massima comune degli slug che sto confrontando,
>> per ciascun campo;
>> -a questo punto se il valore percentuale della sottostringa rispetto allo
>> slug supera per ciascun campo una soglia minima stabilita, i due
>> destinatari sono lo stesso destinatario
>>
>
> invece che la sottostringa di lunghezza massima potresti prendere la
> distanza di Levenshtein fra le due stringhe:
>
> http://en.wikipedia.org/wiki/Levenshtein_distance
>
> puoi valutare se nel tuo caso sia più significativa.
>
> Puoi implementarti l'algoritmo o usare uno di quelli già disponibili
> Googlando ho trovato i seguenti (che non ho verificato):
>
>
> http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Levenshtein_distance#Python
>
> http://code.activestate.com/recipes/576874-levenshtein-distance/
>
> Marco
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>


-- 
Antonio Piepoli
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20120604/64a1fe3a/attachment.html>


Maggiori informazioni sulla lista Python