Apache Mahout inicio en el año 2008 como un sub-proyecto de Apache Lucene. En 2010 se convirtio en un proyecto de primer nivel de Apache.
Mahout es un marco de trabajo (framework) de código abierto, que permite el procesamiento y almacenamiento de grandes datos en un ambiente distribuido a través de cluster de computadores, utilizando modelos de programación simples.
Crear algoritmos de aprendizaje maquina escalables, implementando técnicas como:
Rama de la ciencia que se enfrenta a problemas de programación que requieren aprendizaje automático y mejorar con la experiencia.
Por aprendizaje entendemos el reconocimiento y entendimiento de datos de entrada y la toma de decisiones optimas basadas en los datos suministrados
Los algoritmos de Machine Learning son la base de aplicaciones como:
El aprendizaje supervisado busca entrenar un algoritmo con información disponible. Dicho algoritmo supervisado analiza los datos de entrenamiento y produce una función de inferencia, que puede ser usada para realizar el mapeo de nuevas muestras.
Le da sentido a datos no etiquetados, sin tener ningún entrenamiento previo. El aprendizaje no supervisado es una herramienta extremamente poderosa para analizar datos disponibles y buscar patrones y tendencias.
(No supervisado)
Clasifica un dato de entrada según sus características en un grupo determinado
(Supervisado)
1- SSH (Secure SHell) y llave generada.
2- Java 1.6.x o superior.
3- Hadoop.
4- Maven 3.x para construir el código fuente.
Usar MAVEN para inyectar las siguientes dependencias:
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-core</artifactId>
<version>0.9</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-math</artifactId>
<version>${mahout.version}</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-integration</artifactId>
<version>${mahout.version}</version>
</dependency>$ cd HADOOP_HOME/bin
$ start-all.sh$ hadoop fs -p mkdir /mahout_data
$ hadoop fs -p mkdir /clustered_data
$ hadoop fs -p mkdir /mahout_seq$ hadoop fs -put /home/Hadoop/data/mydata.txt /mahout_data/Archivo de entrada con los datos originales
Archivo de salida con los formato secuencial
mahout seqdirectory -i <input file path> -o <output directory>
Dos de los algoritmos mas importantes de clustering:
mahout canopy -i <input vectors directory>
-o <output directory>
-t1 <threshold value 1>
-t2 <threshold value 2>En Canopy los objetos son tratados como puntos en un espacio plano y esta tecnica es usada como paso inicial de otros algoritmos
Ejemplo:
mahout canopy -i hdfs://localhost:9000/mahout_seq/mydata.seq
-o hdfs://localhost:9000/clustered_data
-t1 20
-t2 30 Paso 3. Archivo Secuencial
mahout kmeans -i <input vectors directory>
-c <input clusters directory>
-o <output working directory>
-dm <Distance Measure technique>
-x <maximum number of iterations>
-k <number of initial clusters>En K-means los objetos son tratados como vectores en un espacio y esta tecnica es usada como paso inicial de otros algoritmos
$MAHOUT_HOME/bin/mahout seq2sparse
--analyzerName (-a) analyzerName The class name of the analyzer
--chunkSize (-chunk) chunkSize The chunkSize in MegaBytes.
--output (-o) output The directory pathname for o/p
--input (-i) input Path to job input directory.Considerar un sitio web que vende productos como dispositivos móviles y accesorios tecnológicos. Si queremos implementar un sistema de recomendación que analice las compras pasadas de los usuarios y recomiende nuevos productos basadas en ellas.
DataModel datamodel = new FileDataModel(new File("input file"));1,00,1.0
1,01,2.0
2,00,1.0
2,01,2.0
input file
UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);NearestNUserNeighborhood: Consiste en encontrar los vecinos mas cercanos de un usuario dado y la cercanía esta dada por el objeto UserSimilariry.
ThresholdUserNeighborhood: Consiste en encontrar todos los vecinos cuya similaridad al usuario dado cumple o excede con un umbral determinado, la similaridad es definida por el objeto UserSimilarity
UserNeighborhood neighborhood = new ThresholdUserNeighborhood(3.0, similarity, datamodel);Limite del umbral de preferencia
Perfil de similaridad de usuarios (Paso 2)
Modelo de datos de usuarios (Paso 1)
UserBasedRecommender recommender = new GenericUserBasedRecommender(datamodel, neighborhood, similarity);Vecindario (Paso 3)
Perfil de similaridad de usuarios (Paso 2)
Modelo de datos de usuarios (Paso 1)
List<RecommendedItem> recommendations = recommender.recommend(2, 3);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}Identificador del usuario al que se le haran las recomendaciones
Cantidad de elementos que se recomendaran al usuario
Esto produce la siguiente salida
RecommendedItem [item:3, value:4.5]
RecommendedItem [item:4, value:4.0]$ mkdir classification_example
$ cd classification_example
$tar xzvf 20news-bydate.tar.gz
wget http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz mahout seqdirectory -i <input file path> -o <output directory>$MAHOUT_HOME/bin/mahout seq2sparse
--analyzerName (-a) analyzerName The class name of the analyzer
--chunkSize (-chunk) chunkSize The chunkSize in MegaBytes.
--output (-o) output The directory pathname for o/p
--input (-i) input Path to job input directory.mahout trainnb
-i ${PATH_TO_TFIDF_VECTORS}
-el
-o ${PATH_TO_MODEL}/model
-li ${PATH_TO_MODEL}/labelindex
-ow
-cmahout testnb
-i ${PATH_TO_TFIDF_TEST_VECTORS}
-m ${PATH_TO_MODEL}/model
-l ${PATH_TO_MODEL}/labelindex
-ow
-o ${PATH_TO_OUTPUT}
-c
-seq