Estou procurando os pares de vetores que têm pelo menos recursos de em comum.eu
Este é apenas um produto interno dos vetores de recursos binários. Quando o produto interno for maior que , o par terá pelo menos L elementos em comum. Esse cálculo deve ser relativamente rápido - pelo menos, mais rápido que a distância euclidiana, o que seria um desperdício e lento para esses dados. Como você estipula que está procurando pares, isso significa inerentemente que você deve fazer ( NL - 1eu cálculos para comparar todos os vetores.( N2)
Encontrar pontos próximos é realmente um problema de agrupamento. Mas o primeiro passo dos algoritmos de agrupamento com os quais estou familiarizado é calcular distâncias ou semelhanças aos pares. Tenho certeza que alguém desenvolveu alternativas mais eficientes. Um ponto sobre a terminologia: ter pelo menos vizinhos comuns é formulado como uma semelhança , não uma distância! Produtos internos são, nesse caso, semelhanças não-normalizadas de cosseno.eu
Você pode tornar isso mais tratável executando apenas o cálculo interno do produto quando a soma do vetor de recurso (que neste caso é a mesma da norma) para uma observação for maior que , pois é impossível para esse vetor de recurso binário ter um produto interno com outro vector recurso binário que irá satisfazer o meu critério quando esta soma é inferior a L . Obviamente, calcular essas somas é apenas de complexidade O ( N ) , portanto, é uma maneira barata de reduzir a magnitude da etapa interna do produto.L - 1euO ( N)
Mas a maneira clássica de reduzir o escopo desse problema é fazer uma pré-filtragem adicional. Você está especialmente interessado em quando um recurso um tanto incomum assume o valor 1? Nesse caso, execute apenas o cálculo para esses vetores de recursos.
Ou talvez você possa se beneficiar com a reestruturação do seu problema. Por exemplo, a amostragem é conhecida por ter boas propriedades; a estatística inferencial desenvolve essa idéia com bastante profundidade. Portanto, talvez seja inviável analisar todo o conjunto de dados, mas é perfeitamente viável examinar uma pequena amostra. Não sei qual pergunta você está tentando responder, mas se você planejar cuidadosamente seu experimento, poderá apenas observar alguns milhares de observações, com mais do que dados suficientes para fins de validação.
Depois de alguma reflexão adicional, eu tenho um forte pressentimento de que os dados que você está trabalhando com algum tipo de gráfico . É muito plausível que G seja composto por vários componentes conectados; nesse caso, você pode decompor G em um conjunto de gráficos, com o feliz efeito colateral de reduzir a dimensionalidade dos dados. Mesmo se o gráfico tiver apenas dois componentes conectados aproximadamente do mesmo tamanho, isso significa que suas comparações O ( N 2 ) em pares têm aproximadamente 1GGGO ( N2) o custo total!1 14
Se o gráfico for simétrico, as seguintes observações podem ser úteis:
- Defina o Laplaciano do seu gráfico como , onde D é uma matriz diagonal de grau (a soma de cada vetor de característica) e A é a matriz de adjacência (o empilhamento de vetores de característica em uma matriz).P= D - ADUMA
- Os tempos Número aparece como um valor próprio de P é o número de componentes ligados de L . A decomposição do gráfico em seus componentes conectados e o trabalho exclusivo com esses componentes terão o efeito colateral de reduzir a dimensão dos seus dados; calcular sua quantidade de interesse será mais fácil. Mas calcular a composição do eigend será caro para um milhão de vértices ...0 0PG
- (Depois de uma permutação cheio) é uma matriz diagonal de bloco dos Laplacians dos componentes conexos de L .PG
- é semidefinido positivo. Isso é quase certamente útil de alguma forma.P
- A conectividade algébrica de é o valor do segundo menor valor próprio de P . Isso mostra como o G está bem conectado . Talvez isso responda a algumas das perguntas nas quais você está interessado: os vetores que possuem características em comum. A teoria dos grafos espectrais desenvolve essa idéia com mais detalhes.GPG
"Isso é um problema do SNA?" Não tenho certeza. Em um aplicativo, os recursos descrevem o comportamento e procuramos conectar pessoas com comportamentos semelhantes. Isso faz disso um problema de SNA?
Se você tem um gráfico bipartido conectando pessoas a comportamentos, pode pensar nisso como uma rede de afiliação , com pessoas como linhas e comportamentos como colunas. Se você quiser conectar as pessoas através dos comportamentos que eles têm em comum, você pode calcular B B T = A . A i j é o número de comportamentos que as pessoas têm em comum. Obviamente, o conjunto de vértices onde A i j ≥ L responde à sua pergunta.BB BT= AUMAeu jUMAeu j≥ L