Sto cercando le coppie di vettori che hanno almeno caratteristiche in comune.L
Questo è solo un prodotto interno dei vettori di caratteristiche binarie. Quando il prodotto interno è maggiore di , la coppia avrà almeno L elementi in comune. Questo dovrebbe essere un calcolo relativamente veloce - almeno, più veloce della distanza euclidea, che sarebbe dispendioso e lento per questi dati. Dato che stabilisci che stai cercando coppie, ciò significa intrinsecamente che devi fare per confrontare ogni vettore.L - 1L( N2)
Trovare punti vicini è davvero un problema di raggruppamento. Ma il primo passo degli algoritmi di clustering con cui ho familiarità è il calcolo di distanze o somiglianze a coppie. Sono sicuro che qualcuno ha sviluppato alternative più efficienti. Un punto sulla terminologia: avere almeno vicini comuni è definito come una somiglianza , non come una distanza! I prodotti interni sono, in questo caso, somiglianze al coseno non normalizzate.L
Puoi renderlo più tracciabile eseguendo il calcolo del prodotto interno solo quando la somma del vettore di feature (che in questo caso è la stessa della norma) per un'osservazione è maggiore di , poiché è impossibile per quel vettore di feature binario di avere un prodotto interno un'altra caratteristica vettore binario che soddisfano il criterio quando questa somma è inferiore . Ovviamente, calcolare queste somme è solo complessità , quindi sono un modo economico per ridurre l'entità del passaggio interno del prodotto.L O ( N )L - 1LO ( N)
Ma il modo classico per ridurre la portata di questo problema è quello di effettuare un pre-filtro aggiuntivo. Sei particolarmente interessato a quando una funzionalità, un po 'insolita, assume il valore 1? In tal caso, eseguire solo il calcolo per quei vettori di caratteristiche.
O forse potresti beneficiare di ri-inquadrare il tuo problema. Ad esempio, è noto che il campionamento abbia delle belle proprietà; la statistica inferenziale si sviluppa su questa idea con una certa profondità. Quindi forse è impossibile analizzare l'intero set di dati, ma è perfettamente fattibile esaminare un piccolo campione. Non so a quale domanda stai cercando di rispondere, ma se progetti attentamente il tuo esperimento, potresti cavartela solo guardando qualche migliaio di osservazioni, con più che sufficienti dati lasciati a fini di validazione.
Dopo qualche pensiero in più, ho una forte sensazione che i dati si sta lavorando è un qualche tipo di grafo . È molto plausibile che sia composto da diversi componenti collegati, nel qual caso è possibile scomporre in una serie di grafici, con il felice effetto collaterale di ridurre la dimensionalità dei dati. Anche se il grafico è solo due componenti collegati approssimativamente della stessa dimensione, ciò significa che i tuoi confronti coppie hanno approssimativamente il costo totale!G G O ( N 2 ) 1solsolsolO ( N2)14
Se il grafico è simmetrico, possono essere utili le seguenti osservazioni:
- Definisci il Laplaciano del tuo grafico come , dove è una matrice diagonale di grado (la somma di ogni vettore di funzione) e è la matrice di adiacenza (l'accatastamento dei vettori di funzione in una matrice).D AP= D - ADUN
- Il numero di volte appare come un autovalore di è il numero di componenti collegati di . Decomporre il grafico nei suoi componenti collegati e lavorare esclusivamente con tali componenti avrà l'effetto collaterale di ridurre la dimensione dei dati; calcolare la tua quantità di interesse sarà più facile. Ma calcolare la composizione elettronica sarà costoso per un milione di vertici ...P G0Psol
- (Dopo una permutazione completa) è un blocco matrice diagonale dei Laplacians dei componenti collegati di .GPsol
- P è semidefinito positivo. Questo è quasi certamente utile in qualche modo.
- La connettività algebrica di è il valore del secondo più piccolo autovalore di . Questo ti dice quanto sia ben collegato . Forse questo risponderà ad alcune delle domande che ti interessano: i vettori che hanno caratteristiche in comune. La teoria dei grafi spettrali sviluppa questa idea in modo più dettagliato.P GsolPsol
"È un problema SNA?" Non ne sono sicuro. In un'applicazione le funzionalità descrivono il comportamento e stiamo cercando di connettere le persone con comportamenti simili. Questo rende questo un problema SNA?
Se hai un grafico bipartito che collega le persone ai comportamenti, puoi pensare a questo come a una rete di affiliazione , con persone come file e comportamenti come colonne. Se si desidera collegare le persone alle persone tramite i comportamenti che hanno in comune, è possibile calcolare . è il numero di comportamenti che le persone hanno in comune. Ovviamente, l'insieme di vertici in cui risponde alla tua domanda.B B T = A A i j A i j ≥ LBB BT= AUNio jUNio j≥ L