# Apache Mahout

Apache Mahout es un proyecto de 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 usaban la plataforma Apache Hadoop, sin embargo, hoy en día se enfoca principalmente en Apache Spark. Mahout también proporciona bibliotecas Java/Scala para operaciones matemáticas comunes (centradas en álgebra lineal y estadísticas) y colecciones primitivas de Java. Mahout es un trabajo en progreso; Se han implementado una serie de algoritmos.

## Características
### Samsara

Apache Mahout-Samsara se refiere a un lenguaje específico de dominio (DSL) de Scala que permite a los usuarios usar la sintaxis R-Like en lugar de la sintaxis tradicional similar a Scala. Esto permite al usuario expresar algoritmos de manera concisa y clara.

### Agnóstico de back-end

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 son libres de implementar cualquier motor que elijan: H2O y Apache Flink se implementaron en el pasado y existen ejemplos en la base del código.

### Aceleradores GPU/CPU

La JVM tiene un cálculo notoriamente lento. Para mejorar la velocidad, se agregaron "solucionadores nativos" que mueven operaciones de BLAS en el núcleo y, por extensión, distribuidas fuera de la JVM, descargándolas en memoria GPU o fuera del montón para el procesamiento a través de múltiples CPU y/o núcleos de CPU, o GPU cuando construido contra la biblioteca ViennaCL. ViennaCL es una biblioteca de 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 consideró estable, por lo que la compilación de OpenCL aún se encuentra en su fase POC experimental.

### Recomendadores

Apache Mahout presenta implementaciones de Alternating Least Squares, Co-Occurrence y Correlated Co-Occurrence, un algoritmo de recomendación exclusivo de Mahout que extiende la co-ocurrencia para usarse en múltiples dimensiones de datos.

## Historia
### Transición de Map Reduce a Apache Spark

Si bien los algoritmos centrales de Mahout para el agrupamiento, 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 es de Hadoop. Por ejemplo, el componente de recomendación de filtrado colaborativo 'Taste' de Mahout era originalmente un proyecto separado y puede ejecutarse de forma independiente sin Hadoop. A partir de la versión 0.10.0, el proyecto cambió su enfoque para construir un entorno de programación independiente del backend, cuyo nombre en código es "Samsara". El entorno consta de un optimizador algebraico independiente del back-end y un Scala DSL algebraico que unifica operadores algebraicos en memoria y distribuidos. Las plataformas algebraicas admitidas son Apache Spark, H2O y Apache Flink. La compatibilidad con los algoritmos de MapReduce comenzó a eliminarse gradualmente en 2014.

### Historial de versiones

Historial de versiones :
| Versión | Fecha de lanzamiento | notas |
| 0.1 | 2009-04-07 | |
| 0.2 | 2009-11-18 | |
| 0.3 | 2010-03-17 | |
| 0.4 | 2010-10-31 | |
| 0.5 | 2011-05-27 | |
| 0.6 | 2012-02-06 | |
| 0.7 | 2012-05-16 | |
| 0.8 | 2013-07-25 | |
| 0.9 | 2014-02-01 | |
| 0.10.0 | 2015-04-11 | ADSL Samsara |
| 0.10.1 | 2015-05-31 | |
| 0.10.2 | 2015-08-06 | |
| 0.11.0 | 2015-08-07 | |
| 0.11.1 | 2015-11-06 | |
| 0.11.2 | 2016-03-11 | |
| 0.12.0 | 2016-04-11 | Añadido motor Apache Flink |
| 0.12.1 | 2016-05-19 | |
| 0.12.2 | 2016-06-13 | |
| 0.13.0 | 2017-04-17 | |
| 0.14.0 | 2019-03-07 | Solo fuente (sin binarios) |
| 14.1 | 2020-10-07 | |

### Desarrolladores

Apache Mahout es desarrollado por una comunidad. El proyecto es administrado por un grupo llamado "Comité de Gestión del Proyecto" (PMC). El PMC actual es Andrew Musselman, Andrew Palumbo, Drew Farris, Isabel Drost-Fromm, Jake Mannix, Pat Ferrel, Paritosh Ranjan, Trevor Grant, Robin Anil, Sebastian Schelter, Stevo Slavić.