Estoy trabajando con algunos conjuntos de datos grandes usando el paquete gbm en R. Tanto mi matriz de predicción como mi vector de respuesta son bastante escasos (es decir, la mayoría de las entradas son cero). Esperaba construir árboles de decisión usando un algoritmo que aprovecha esta escasez, como se hizo aquí ). En ese documento, como en mi situación, la mayoría de los elementos tienen solo algunas de las muchas características posibles, por lo que pudieron evitar muchos cálculos desperdiciados al suponer que sus elementos carecían de una característica dada a menos que los datos indiquen explícitamente lo contrario. Mi esperanza es que pueda obtener una aceleración similar usando este tipo de algoritmo (y luego envolviendo un algoritmo de refuerzo para mejorar mi precisión predictiva).
Como no parecían publicar su código, me preguntaba si había paquetes o bibliotecas de código abierto (en cualquier idioma) que estén optimizados para este caso. Idealmente, me gustaría algo que pudiera tomar una matriz dispersa directamente del Matrix
paquete de R , pero tomaré lo que pueda obtener.
He mirado alrededor y parece que este tipo de cosas debería estar ahí afuera:
Los químicos parecen encontrarse mucho con este problema (el artículo que relacioné anteriormente trataba sobre aprender a encontrar nuevos compuestos de drogas), pero las implementaciones que pude encontrar fueron patentadas o altamente especializadas para el análisis químico. Sin embargo, es posible que uno de ellos sea rediseñado.
La clasificación de documentos también parece ser un área donde es útil aprender de espacios de características dispersos (la mayoría de los documentos no contienen la mayoría de las palabras). Por ejemplo, hay una referencia oblicua a una implementación escasa de C4.5 (un algoritmo tipo CART) en este documento , pero no hay código.
De acuerdo con la lista de correo , WEKA puede aceptar datos escasos, pero a diferencia del método en el documento que he vinculado anteriormente, WEKA no está optimizado para aprovecharlo en términos de evitar ciclos de CPU desperdiciados.
¡Gracias por adelantado!
fuente
glmnet
ye1071::svm
tanto apoyo escasaMatrix
objetos.GAMboost
yGLMboost
(del paqueteGAMboost
) puede también.Respuestas:
Me gustaría ver un punto de referencia de su implementación escasa frente a las implementaciones de CART modernas que se usan en los RF. Ese documento es bastante antiguo en términos de avances en esta área y me sorprendería si todavía proporcionara una aceleración significativa.
Parte de la razón es que el uso de un algoritmo de clasificación inteligente como Quicksort en la búsqueda dividida puede proporcionar un rendimiento cercano a O (n) para características casi constantes (incluidas las dispersas). Las implementaciones rápidas también rastrean cuándo una característica se ha vuelto constante dentro de una rama de un árbol y ya no se debe examinar. Las representaciones de características densas proporcionan búsquedas rápidas de una manera amigable con el caché de la CPU, por lo que necesitaría una representación escasa realmente inteligente para ganar en los ciclos de la CPU.
Esto se discute aquí , aquí , aquí .
De hecho, implementé una representación de datos dispersa de datos en un punto de mi paquete RF CloudForest, pero encontré que era más lenta que una representación densa de los datos y la abandoné, aunque proporcionaba algunas ventajas de memoria.
Mi recomendación sería probar scikit learn o cloudforest integrado en cosas de impulso y ver si es lo suficientemente rápido. Ambos se pueden ampliar con criterios de impulso personalizados si desea hacer algo no estándar. (En realidad, escribí Cloudforest originalmente para trabajar con grandes conjuntos de datos genéticos altamente dimensionales que son muy similares a lo que estás describiendo).
fuente
Probablemente hay una pequeña posibilidad de que cualquier código se aproveche de eso; preferiría escribir algo por su cuenta.
Sin embargo, la otra opción es transformar sus datos para reducir el tamaño de sus datos eliminando información redundante. Es difícil saber cómo sin la información sobre sus datos, pero ¿tal vez pueda fusionar algunas características que sabe que no se superponen, partes de PCA o cambios en la representación de algunos descriptores? Además, si dice que su respuesta también es escasa, ¿tal vez sea razonable reducir la muestra de objetos con 0 en respuesta?
fuente
¿Has mirado el
caret
paquete en R? Proporciona una interfaz que facilita el uso de una variedad de modelos, incluidos algunos para particiones recursivas comorpart
,ctree
yctree2
.fuente
Matrix
objetos sería maravilloso, pero actualmente no existe. Todo se convierte en un marco de datos.