Apache Mahout es un proyecto de la Apache Software Foundation para producir implementaciones gratuitas de algoritmos de aprendizaje automático distribuidos o escalables , centrados principalmente en el álgebra lineal . En el pasado, muchas de las implementaciones utilizan la plataforma Apache Hadoop , sin embargo, hoy en día se centra principalmente en Apache Spark . [3] [4] Mahout también proporciona bibliotecas Java/Scala para operaciones matemáticas comunes (centradas en el álgebra lineal y las estadísticas) y colecciones Java primitivas. Mahout es un trabajo en progreso; se han implementado varios algoritmos. [5]
Apache Mahout-Samsara hace referencia a un lenguaje específico de dominio (DSL) de Scala que permite a los usuarios utilizar una sintaxis similar a la de R en lugar de la sintaxis tradicional similar a la de Scala. Esto permite al usuario expresar algoritmos de forma concisa y clara.
val G = B %*% B . t - C - C . t + ( ksi punto ksi ) * ( s_q cruz s_q )
El código de Apache Mahout abstrae el lenguaje específico del dominio del motor donde se ejecuta el código. Si bien el desarrollo activo se realiza con el motor Apache Spark, los usuarios tienen la libertad de implementar cualquier motor que elijan: H2O y Apache Flink se han implementado en el pasado y existen ejemplos en la base de código.
La JVM tiene una computación notoriamente lenta. Para mejorar la velocidad, se agregaron "solucionadores nativos" que mueven las operaciones BLAS internas y, por extensión, distribuidas fuera de la JVM, descargándolas en memoria fuera del montón o en la GPU para su procesamiento a través de múltiples CPU y/o núcleos de CPU, o GPU cuando se compilan contra la biblioteca ViennaCL. [6] ViennaCL es una biblioteca C++ altamente optimizada con operaciones BLAS implementadas en OpenMP y OpenCL. A partir de la versión 14.1, la compilación de OpenMP se considera estable, mientras que la compilación de OpenCL aún se encuentra en su fase experimental de prueba de concepto.
Apache Mahout presenta implementaciones de mínimos cuadrados alternativos, coocurrencia y coocurrencia correlacionada, un algoritmo de recomendación exclusivo de Mahout que extiende la coocurrencia para usarse en múltiples dimensiones de datos.
Si bien los algoritmos básicos de Mahout para la agrupación , la clasificación y el filtrado colaborativo basado en lotes se implementaron sobre Apache Hadoop utilizando el paradigma map/reduce , no restringió las contribuciones a las implementaciones basadas en Hadoop. También se recibieron con agrado las contribuciones que se ejecutan en un solo nodo o en un clúster que no sea Hadoop. Por ejemplo, el componente recomendador de filtrado colaborativo "Taste" de Mahout fue originalmente un proyecto independiente y puede ejecutarse de forma independiente sin Hadoop.
A partir de la versión 0.10.0, el proyecto cambió su enfoque a la creación de un entorno de programación independiente del backend, cuyo nombre en código era "Samsara". [7] [8] [9] El entorno consta de un optimizador algebraico independiente del backend y un DSL algebraico de Scala que unifica operadores algebraicos distribuidos y en memoria. Las plataformas algebraicas compatibles son Apache Spark , H2O y Apache Flink . [ cita requerida ] El soporte para algoritmos MapReduce comenzó a eliminarse gradualmente en 2014. [10]
Apache Mahout es desarrollado por una comunidad. El proyecto está gestionado por un grupo llamado "Comité de Gestión de Proyectos" (PMC). El PMC actual está formado por Andrew Musselman, Andrew Palumbo, Drew Farris, Isabel Drost-Fromm, Jake Mannix, Pat Ferrel, Paritosh Ranjan, Trevor Grant, Robin Anil, Sebastian Schelter y Stevo Slavić. [11]