Chiedo scusa se rispondo solo ora ma ammetto di non aver controllato questa mail in questi giorni :P . <br><br><br>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.<br>
<br><br>Adesso vi contestualizzo un pò di più il problema.<br>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.<br>
<br>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.<br>
<br>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 ?<br>
<br><br>Bene quindi lo scenario come l'ho immaginato io è : <br><br>Considero un solo identity provider che gestice la nostra identità sotto forma di tupla.<br>Le informazioni parziali che ogni serive provider avrà non sono altro che un sottoinsieme di questa tupla.<br>
<br>ok quella era solo una nota di colore...<br><br>adesso tornando ai dettagli tecnici..<br><br>ripeto... non essendo esperto di machine learning ho scelto SVM perchè mi sembrava mooooolto semplice....<br><br>l'ho incontrata per caso navigando in <a href="http://mlpy.sourceforge.net/">http://mlpy.sourceforge.net/</a> 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. <br>
<br>Quindi se c'è qualcuno che ne capisce qualcosina di machine learning magari potrebbe dare qualche suggerimento :P.<br><br>Enrico tu per esempio perchè dici che SVM non va bene? Io sto parlando di SVM con kernel esponenziale.<br>
<br>Leggendo <a href="http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf">http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf</a> il documento ufficiale di Libsvm alla voce Probabilità è spiegato come ottengono la probabilità condizionata, che nel mio caso sarebbe p(match | pattern di metriche).<br>
<br>Il problema dei vettori di training è molto importante. Li sto generando artificialmente con questo software<br><br><a href="http://adatagenerator.sourceforge.net/cdc-tutorial/index.html">http://adatagenerator.sourceforge.net/cdc-tutorial/index.html</a><br>
<br>che dovrebbe prendere in input un database (anche lui artificiale <a href="http://www.generatedata.com/">http://www.generatedata.com/</a> ) e basandosi su alcune "regole di errore" generare coppie di tuple ed etichettarle come match o unmatch. <br>
<br><br>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 ! <br>
<br><br>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...<br><br>Per la fase "graph clustering" forse la situazione è più rosea...<br>
<br><a href="http://perso.crans.org/aynaud/communities/index.html">http://perso.crans.org/aynaud/communities/index.html</a><br><br>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.<br>
<br><br>Grazie 1000 per le opinioni e per il supporto<br><br><br>ps. Sono ad Eindhoven ed oggi la temperatura è 1/3 rispetto a quella del mio paese (Bari) :( <br><br><br><br><br><pre><br><br></pre><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br><br><br><div class="gmail_quote">Il giorno 01 giugno 2012 09:12, Marco De Paoli <span dir="ltr"><<a href="mailto:depaolim@gmail.com" target="_blank">depaolim@gmail.com</a>></span> ha scritto:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br><br><div class="gmail_quote">Il giorno 31 maggio 2012 22:49, Diego Barrera <span dir="ltr"><<a href="mailto:diegonebarrera@yahoo.it" target="_blank">diegonebarrera@yahoo.it</a>></span> ha scritto:<div class="im">
<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Io ho risolto in questo modo:<br>
-prendo ciascun campo e mi ricavo lo slug;<br>
-trovo la sottostringa massima comune degli slug che sto confrontando, per ciascun campo;<br>
-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<br></blockquote></div><div><br>invece che la sottostringa di lunghezza massima potresti prendere la distanza di Levenshtein fra le due stringhe:<br>

<br><a href="http://en.wikipedia.org/wiki/Levenshtein_distance" target="_blank">http://en.wikipedia.org/wiki/Levenshtein_distance</a><br><br>puoi valutare se nel tuo caso sia più significativa.<br><br>Puoi implementarti l'algoritmo o usare uno di quelli già disponibili<br>

Googlando ho trovato i seguenti (che non ho verificato):<br><br><a href="http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Levenshtein_distance#Python" target="_blank">http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Levenshtein_distance#Python</a><br>

<br><a href="http://code.activestate.com/recipes/576874-levenshtein-distance/" target="_blank">http://code.activestate.com/recipes/576874-levenshtein-distance/</a><span class="HOEnZb"><font color="#888888"><br><br>Marco<br>
</font></span></div></div>
<br>_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" target="_blank">http://lists.python.it/mailman/listinfo/python</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Antonio Piepoli<br><br>