2011-11-20 10 views
5

Im praticamente nuovo ai sistemi di data mining e di raccomandazione, ora cercando di costruire una sorta di sistema rec per gli utenti che hanno tali parametri:La combinazione di diverse somiglianze per costruire una somiglianza finale

  • città
  • educazione
  • interesse

Per calcolare somiglianza tra di loro im gonna applicare similarità del coseno e somiglianza discreta. Per esempio:

  • città: se x = y allora d (x, y) = 0. In caso contrario, d (x, y) = 1.
  • formazione: qui i utilizzerà somiglianza coseno come parole apparire nel nome del reparto o di laurea
  • interesse: ci saranno hard-coded numero di utenti interesse può scegliere e coseno di similitudine sarà calcolata sulla base di due vettori come questo:

1 0 0 1 0 0 ... n 
1 1 1 0 1 0 ... n 

dove 1 indica la presenza dell'interesse e n è il numero totale di tutti gli interessi.

La mia domanda è: Come combinare queste 3 somiglianze nell'ordine appropriato? Voglio dire, sommarli non sembra abbastanza intelligente, vero? Inoltre vorrei sentire commenti sul mio "sistema di similarità newbie", hah.

+0

Ci sono molti metodi, molta letteratura che hai letto finora? –

risposta

3

Non ci sono risposte dure e veloci, poiché le risposte qui dipendono molto dal dominio di input e problema. Gran parte del lavoro di machine learning è l'arte (non la scienza) della preparazione del tuo input, per questo motivo. Potrei darti alcune idee generali su cui riflettere. Hai due problemi: creare somiglianze significative con ciascuno di questi elementi e combinarli.

La somiglianza della città sembra ragionevole ma dipende molto dal tuo dominio. È davvero il caso che essere nella stessa città significhi tutto, e stare nelle città vicine non significa nulla? Ad esempio, essere in città di dimensioni simili conta per qualcosa? Nello stesso stato? Se fanno la tua somiglianza dovrebbero rifletterci.

Istruzione: ho capito perché è possibile utilizzare la somiglianza del coseno, ma questo non risolverà il problema reale qui, che sta gestendo diversi token che indicano la stessa cosa. Hai bisogno di "eng" e "engineering" per abbinare, e "ba" e "scapoli", cose del genere. Una volta preparati i token in questo modo, potrebbe dare buoni risultati.

Interesse: Non penso che il coseno sia la scelta migliore qui, prova una semplice somiglianza tanimoto (solo la dimensione dell'intersezione rispetto alla dimensione dell'unione).

Non si possono semplicemente sommare, poiché presumo tu voglia ancora un valore nell'intervallo [0,1]. Potresti mediarli. Ciò fa supporre che l'output di ognuno di questi sia direttamente comparabile, che siano le stesse "unità" se lo si desidera. Non sono qui; per esempio non è come se fossero probabilità.

Potrebbe ancora funzionare correttamente nella pratica per la media, forse con pesi. Ad esempio, essere nella stessa città qui è importante quanto avere esattamente gli stessi interessi. È vero o dovrebbe essere meno importante?

È possibile provare e testare diverse variazioni e pesi, come si spera che si disponga di uno schema per testare i dati storici. Ti indico al nostro progetto, Mahout, in quanto ha una struttura completa per i consiglieri e la valutazione.

Tuttavia, tutti questi tipi di soluzioni sono hacky ed euristici. Penso che potresti voler adottare un approccio più formale alla codifica delle funzioni e alle somiglianze. Se sei disposto ad acquistare un libro e ad esempio Mahout, lo Mahout in Action ha una buona copertura nei capitoli del cluster su come selezionare e codificare le funzionalità e come fare una somiglianza con esse.

+0

Grazie! Una copertura davvero ampia su idee generali, aiuta molto. Penserò di più alla somiglianza della posizione, e capisco perfettamente le tue opinioni sulle parole di educazione corrispondenti, spero di poterlo fare anche in futuro :) – Leg0

+0

Quindi, come mi consiglieresti di fare una media di tutte quelle somiglianze? Ad esempio, se la loro importanza va in ordine decrescente, non posso visualizzarla. – Leg0

+0

Non c'è idea di ordinare; puoi semplicemente calcolare una media ponderata delle somiglianze in base ad alcuni pesi che componi. –

0

Ecco il solito trucco nell'apprendimento automatico.

città: se x = y allora d (x, y) = 0. In caso contrario, d (x, y) = 1.

prendo questo significa utilizzare un one-of -K codifica. Quello è buono.

formazione: qui userò somiglianza coseno come parole compaiono nel nome del reparto o Laurea

È possibile anche utilizzare un one-of-K codifica qui, per produrre un vettore di dimensione | V | dove V è il vocabolario, cioè tutte le parole nei dati di allenamento.

Se ora si normalizza il numero di interesse in modo che rientri sempre nell'intervallo [0,1], è possibile utilizzare le normali metriche di distanza L1 (Manhattan) o L2 (euclidea) tra i vettori finali. Quest'ultimo corrisponde alla metrica di similarità del coseno del recupero di informazioni.

Sperimentare con L1 e L2 per decidere quale sia il migliore.

+0

Grazie, ma non ha davvero ottenuto la frase "codifica one-of-K" – Leg0

+0

@ Leg0: è un po 'difficile da spiegare in una casella di commento. Dai un'occhiata a [questa mia domanda] (http://stackoverflow.com/questions/8020403/1-of-k-coding-in-octave) per un esempio. –