Estoy haciendo algunas pruebas agrupando un gran número de vectores dispersos muy grandes que representan frecuencia-documento-frecuencia-frecuencia-término de varios documentos hipertextuales. ¿Qué algoritmo sugeriría para agrupar estos datos, teniendo en cuenta las proporciones del conjunto de datos? La dimensión de los vectores sería> 3 · 10 y el número de vectores podría ser alrededor de 10 . He echado un vistazo a los algoritmos de dbscan y óptica. La cantidad de conglomerados no se conoce a priori. Y un índice espacial con tal alta dimensionalidad parece complicado.Agrupamiento de espacio vectorial enorme
Respuesta
He tenido resultados casi tan buenos con un simple clúster de K-means como casi cualquier otra cosa, y es definitivamente más rápido que la mayoría de las alternativas. También obtuve buenos resultados con una aglomeración por pares, pero es bastante más lenta. Para K-means, tienes que comenzar con una cantidad estimada de clusters, pero puedes ajustarla algorítmicamente a medida que avanzas. Si encuentra dos clústeres con medios que están demasiado cerca uno del otro, reducirá la cantidad de clústeres. Si encuentra grupos con un rango de variación demasiado grande, pruebe con más clústeres. He encontrado que sqrt (N) es un punto de partida razonable, pero generalmente empiezo con más de 10^7 documentos en lugar de 10^9. Para 10^9, podría tener sentido reducir eso un poco.
Si fuera por mí, sin embargo, pensaría mucho sobre comenzar reduciendo la dimensionalidad con algo así como Landmark MDS, y luego haciendo la agrupación.
Los árboles de decisión son populares para trabajar eficientemente en espacios de gran dimensión. Consulte Clustering Via Decision Tree Construction.
Además, Randomized Forests son aprendices extremadamente eficientes y OpenCV implementation exists si quieres jugar con él.
Oí que semantic hashing logra excelentes resultados. Sin embargo, las redes de creencias profundas son bastante difíciles de implementar. Es posible que desee probar el hash de min (que es un enfoque probabilístico, sin embargo) o locality sensistive hashing for euclidean spaces.
En general, la agrupación en tales espacios de gran dimensión es difícil debido a la maldición de la dimensionalidad y al hecho de que la mayoría de los artículos tienen distancias similares entre sí. Los enfoques estándar como K-Means podrían funcionar si reduce la dimensionalidad de antemano a través de SOM o PCA.
Gracias por los enlaces interesantes. – piotr
Cuando la agrupación de datos yo siempre trato al menos estos dos algoritmos en este orden:
K-medias: tratar de ajustar los resultados tanto como sea posible. Si logras que K-Means trabaje para ti y te proporcione resultados decentes, seguramente no te irá mejor que con cualquier otro algoritmo.
Maximización de las expectativas: el algoritmo K-means se desarrolló en realidad para ser una alternativa barata y buena al algoritmo EM. El algoritmo EM es más complejo de entender y más costoso de computar, pero los resultados de EM son excelentes. Puede obtener más información sobre EM http://en.wikipedia.org/wiki/Expectation-maximization_algorithm. Hay una aplicación OPENCV de EM: http://opencv.willowgarage.com/documentation/expectation-maximization.html
Si los resultados de ninguno de estos dos son satisfactorios, me gustaría empezar a buscar en otro lugar, pero no hasta que haya probado ambos.
¿No es K-Means una instancia de EM? – bayer
@bayer: No, ciertamente no son el mismo algoritmo, si eso es lo que quieres decir. K-Means no es paramétrico, pero EM lo es (es decir, EM afirma que existe una distribución gaussiana multi-variable subyacente para los datos, lo cual no es una suposición muy estricta si se considera el teorema del límite central.) Por lo que entiendo, el EM Algoritmo a veces se agrupa como un meta-algoritmo donde otros algoritmos caen bajo él. En realidad, se puede implementar de forma independiente de lo que he visto. – ldog
- 1. Cómo diferenciar integrales con biblioteca de espacio vectorial (haskell)
- 2. algoritmo de agrupamiento 3D
- 3. reserva vectorial C++
- 4. MVC4 Estrategia de agrupamiento
- 5. carreras agrupamiento de datos
- 6. Algoritmo de agrupamiento - Torneo
- 7. C vectorial ++ acumula
- 8. recodificación numérica vectorial R
- 9. enorme estructura de gráfico
- 10. Escalado y agrupamiento JPA
- 11. Agrupamiento Aglomerativo en Matlab
- 12. 'Inteligente' agrupamiento con LINQ
- 13. Opciones para agrupamiento de Lucene.NET?
- 14. OpenLayers, buen agrupamiento de marcadores
- 15. agrupamiento con similitud de coseno
- 16. Paralelización una operación vectorial Numpy
- 17. Boost uBLAS matriz/producto vectorial
- 18. Dividir enorme repo git
- 19. ViewFlipper tiene retraso "enorme"
- 20. Archivo enorme en Clojure y error de espacio en montón Java
- 21. Enorme XML en Clojure
- 22. Firefox - Enorme Cursor
- 23. diámetro de un gráfico enorme
- 24. producto vectorial de un vector en NumPy
- 25. Inicializar una matriz vectorial de cadenas
- 26. extraer imagen vectorial de un archivo pdf
- 27. Rastreo rápido de texto y arte vectorial
- 28. Secciones de agrupamiento UITableView de NSMutableArray
- 29. Algoritmo de agrupamiento del filtro de precios
- 30. Agrupamiento conceptual de documentos similares en conjunto?
K-Means debe ** siempre ** ser la primera técnica de segmentación que intente al intentar agrupar * cualquier cosa *. Es simple, eficiente y proporciona excelentes resultados la mayor parte del tiempo.El único inconveniente es tener que elegir un valor apropiado de K. Siempre se puede intentar una secuencia creciente de K calculando la varianza entre los grupos como un criterio para la calidad del agrupamiento. Sin embargo, esto no funciona tan bien en la práctica. – ldog