Estoy buscando los pares de vectores que tienen al menos características en común.L
Esto es solo un producto interno de vectores de características binarias. Cuando el producto interno es mayor que , el par tendrá al menos L elementos en común. Esto debería ser un cálculo relativamente rápido, al menos, más rápido que la distancia euclidiana, lo que sería un desperdicio y lento para estos datos. Debido a que se estipula que estás buscando parejas, esto será inherentemente significa que tenga que hacer ( NL−1L cálculos para comparar cada vector.( N2)
Encontrar puntos que estén juntos es un problema de agrupamiento. Pero el primer paso de los algoritmos de agrupación con los que estoy familiarizado es calcular distancias o similitudes por pares. Estoy seguro de que alguien ha desarrollado alternativas más eficientes. Un punto sobre la terminología: ¡tener al menos vecinos comunes se expresa como una similitud , no como una distancia! Los productos internos son, en este caso, similitudes de coseno no normalizadas.L
Puede hacer que esto sea más manejable solo realizando el cálculo interno del producto cuando la suma del vector de características (que en este caso es la misma que la norma) para una observación es mayor que , ya que es imposible para ese vector de características binarias tener un producto interior con otro vector de características binario que satisfaga a mi criterio, cuando esta suma es menor que L . Obviamente, calcular estas sumas es solo una complejidad O ( N ) , por lo que es una forma económica de reducir la magnitud del paso interno del producto.L - 1LO ( N)
Pero la forma clásica de reducir el alcance de este problema es hacer un prefiltrado adicional. ¿Está especialmente interesado cuando una característica poco común toma el valor 1? Si es así, solo realice el cálculo para esos vectores de características.
O tal vez podría beneficiarse reformulando su problema. Por ejemplo, se sabe que el muestreo tiene buenas propiedades; Las estadísticas inferenciales se desarrollan sobre esta idea con bastante profundidad. Entonces, quizás no sea factible analizar todo el conjunto de datos, pero es perfectamente factible examinar una pequeña muestra. No sé qué pregunta está tratando de responder, pero si diseña cuidadosamente su experimento, puede salirse con la suya solo mirando unos pocos miles de observaciones, con datos más que suficientes para fines de validación.
Después de algún pensamiento adicional, tengo una fuerte sospecha de que los datos que va a trabajar tiene algún tipo de gráfico . Es muy plausible que G esté compuesto por varios componentes conectados, en cuyo caso puede descomponer G en un conjunto de gráficos, con el feliz efecto secundario de reducir la dimensionalidad de los datos. Incluso si el gráfico es solo dos componentes conectados de aproximadamente el mismo tamaño, eso significa que sus comparaciones por pares de O ( N 2 ) tienen aproximadamente 1solsolsolO ( N2) el costo total!14 4
Si el gráfico es simétrico, las siguientes observaciones pueden ser útiles:
- Defina el Laplaciano de su gráfico como , donde D es una matriz diagonal de grados (la suma de cada vector de características) y A es la matriz de adyacencia (el apilamiento de vectores de características en una matriz).PAG= D - AreUNA
- El número de veces aparece como un valor propio de P es el número de componentes conectados de G . Descomponer el gráfico en sus componentes conectados y trabajar únicamente con esos componentes tendrá el efecto secundario de reducir la dimensión de sus datos; calcular su cantidad de interés será más fácil. Pero calcular la descomposición propia será costoso para un millón de vértices ...0 0PAGsol
- (Después de una permutación completa) es una matriz diagonal por bloques de los Laplacianos de los componentes conectados de G .PAGsol
- es positivo semidefinido. Esto es casi ciertamente útil de alguna manera.PAG
- La conectividad algebraica de es el valor de la segunda más pequeño valor propio de P . Esto te dice qué tan bien conectado está G. Tal vez eso responda algunas de las preguntas que le interesan sobre los vectores que tienen características en común. La teoría de grafos espectrales desarrolla esta idea con más detalle.solPAGsol
"¿Es este un problema de SNA?" No estoy seguro. En una aplicación, las características describen el comportamiento y buscamos conectar a personas con comportamientos similares. ¿Eso hace que esto sea un problema de SNA?
Si tiene un gráfico bipartito que conecta a las personas con comportamientos, puede pensar en esto como una red de afiliación , con personas como filas y comportamientos como columnas. Si desea conectar a la gente a la gente a través de los comportamientos que tienen en común, se puede calcular B B T = A . A i j es la cantidad de comportamientos que las personas tienen en común. Obviamente, el conjunto de vértices donde A i j ≥ L responde a su pregunta.siB BT= AUNAyo jUNAyo j≥ L