Mahout - Guía rápida

Vivimos en una época en la que la información está disponible en abundancia. ¡La sobrecarga de información se ha extendido a tal altura que a veces resulta difícil administrar nuestros pequeños buzones de correo! Imagine el volumen de datos y registros que algunos de los sitios web populares (como Facebook, Twitter y Youtube) deben recopilar y administrar a diario. No es raro que incluso los sitios web menos conocidos reciban grandes cantidades de información a granel.

Normalmente, recurrimos a algoritmos de minería de datos para analizar datos masivos para identificar tendencias y sacar conclusiones. Sin embargo, ningún algoritmo de minería de datos puede ser lo suficientemente eficiente para procesar conjuntos de datos muy grandes y proporcionar resultados en un tiempo rápido, a menos que las tareas computacionales se ejecuten en múltiples máquinas distribuidas en la nube.

Ahora tenemos nuevos marcos que nos permiten dividir una tarea de cálculo en múltiples segmentos y ejecutar cada segmento en una máquina diferente. Mahout es un marco de minería de datos de este tipo que normalmente se ejecuta junto con la infraestructura de Hadoop en segundo plano para administrar grandes volúmenes de datos.

¿Qué es Apache Mahout?

Un mahout es aquel que maneja a un elefante como su amo. El nombre proviene de su estrecha asociación con Apache Hadoop, que utiliza un elefante como logotipo.

Hadoop es un marco de código abierto de Apache que permite almacenar y procesar macrodatos en un entorno distribuido a través de grupos de computadoras utilizando modelos de programación simples.

apache Mahoutes un proyecto de código abierto que se utiliza principalmente para crear algoritmos de aprendizaje automático escalables. Implementa técnicas populares de aprendizaje automático como:

  • Recommendation
  • Classification
  • Clustering

Apache Mahout comenzó como un subproyecto de Lucene de Apache en 2008. En 2010, Mahout se convirtió en un proyecto de alto nivel de Apache.

Características de Mahout

Las características primitivas de Apache Mahout se enumeran a continuación.

  • Los algoritmos de Mahout están escritos sobre Hadoop, por lo que funciona bien en entornos distribuidos. Mahout usa la biblioteca Apache Hadoop para escalar de manera efectiva en la nube.

  • Mahout ofrece al codificador un marco listo para usar para realizar tareas de minería de datos en grandes volúmenes de datos.

  • Mahout permite que las aplicaciones analicen grandes conjuntos de datos de forma eficaz y rápida.

  • Incluye varias implementaciones de agrupación en clústeres habilitadas para MapReduce, como k-means, fuzzy k-means, Canopy, Dirichlet y Mean-Shift.

  • Admite implementaciones de clasificación Naive Bayes distribuidas y complementarias Naive Bayes.

  • Viene con capacidades de función de fitness distribuidas para programación evolutiva.

  • Incluye bibliotecas matriciales y vectoriales.

Aplicaciones de Mahout

  • Empresas como Adobe, Facebook, LinkedIn, Foursquare, Twitter y Yahoo utilizan Mahout internamente.

  • Foursquare te ayuda a encontrar lugares, comida y entretenimiento disponibles en un área en particular. Utiliza el motor de recomendación de Mahout.

  • Twitter usa Mahout para modelar los intereses del usuario.

  • Yahoo! utiliza Mahout para la minería de patrones.

Apache Mahout es una biblioteca de aprendizaje automático altamente escalable que permite a los desarrolladores utilizar algoritmos optimizados. Mahout implementa técnicas populares de aprendizaje automático como recomendación, clasificación y agrupación en clústeres. Por lo tanto, es prudente tener una breve sección sobre aprendizaje automático antes de seguir adelante.

¿Qué es el aprendizaje automático?

El aprendizaje automático es una rama de la ciencia que se ocupa de programar los sistemas de tal manera que aprendan y mejoren automáticamente con la experiencia. Aquí, aprender significa reconocer y comprender los datos de entrada y tomar decisiones acertadas basadas en los datos proporcionados.

Es muy difícil atender todas las decisiones basadas en todos los insumos posibles. Para abordar este problema, se desarrollan algoritmos. Estos algoritmos construyen conocimiento a partir de datos específicos y experiencias pasadas con los principios de estadística, teoría de probabilidad, lógica, optimización combinatoria, búsqueda, aprendizaje por refuerzo y teoría de control.

Los algoritmos desarrollados forman la base de varias aplicaciones como:

  • Procesamiento de la visión
  • Procesamiento de lenguaje
  • Pronóstico (por ejemplo, tendencias del mercado de valores)
  • Reconocimiento de patrones
  • Games
  • Procesamiento de datos
  • Sistemas expertos
  • Robotics

El aprendizaje automático es un área extensa y está más allá del alcance de este tutorial cubrir todas sus características. Hay varias formas de implementar técnicas de aprendizaje automático, sin embargo, las más utilizadas sonsupervised y unsupervised learning.

Aprendizaje supervisado

El aprendizaje supervisado se ocupa de aprender una función a partir de los datos de entrenamiento disponibles. Un algoritmo de aprendizaje supervisado analiza los datos de entrenamiento y produce una función inferida, que puede usarse para mapear nuevos ejemplos. Los ejemplos comunes de aprendizaje supervisado incluyen:

  • clasificar los correos electrónicos como spam,
  • etiquetar páginas web según su contenido, y
  • reconocimiento de voz.

Hay muchos algoritmos de aprendizaje supervisado, como redes neuronales, máquinas de vectores de soporte (SVM) y clasificadores Naive Bayes. Mahout implementa el clasificador Naive Bayes.

Aprendizaje sin supervisión

El aprendizaje no supervisado da sentido a los datos sin etiquetar sin tener ningún conjunto de datos predefinido para su entrenamiento. El aprendizaje no supervisado es una herramienta extremadamente poderosa para analizar los datos disponibles y buscar patrones y tendencias. Se usa más comúnmente para agrupar entradas similares en grupos lógicos. Los enfoques comunes para el aprendizaje no supervisado incluyen:

  • k-means
  • mapas autoorganizados, y
  • agrupación jerárquica

Recomendación

La recomendación es una técnica popular que proporciona recomendaciones detalladas basadas en la información del usuario, como compras anteriores, clics y calificaciones.

  • Amazon utiliza esta técnica para mostrar una lista de elementos recomendados que podrían interesarle, extrayendo información de sus acciones pasadas. Hay motores de recomendación que funcionan detrás de Amazon para capturar el comportamiento del usuario y recomendar elementos seleccionados en función de sus acciones anteriores.

  • Facebook utiliza la técnica de recomendación para identificar y recomendar la "lista de personas que quizás conozcas".

Clasificación

Clasificación, también conocida como categorization, es una técnica de aprendizaje automático que utiliza datos conocidos para determinar cómo se deben clasificar los nuevos datos en un conjunto de categorías existentes. La clasificación es una forma de aprendizaje supervisado.

  • Los proveedores de servicios de correo como Yahoo! y Gmail utilizan esta técnica para decidir si un correo nuevo debe clasificarse como spam. El algoritmo de categorización se entrena a sí mismo mediante el análisis de los hábitos de los usuarios de marcar ciertos correos como spam. En base a eso, el clasificador decide si un correo futuro debe depositarse en su bandeja de entrada o en la carpeta de spam.

  • La aplicación iTunes usa la clasificación para preparar listas de reproducción.

Clustering

La agrupación se utiliza para formar grupos o agrupaciones de datos similares basados ​​en características comunes. La agrupación en clústeres es una forma de aprendizaje no supervisado.

  • Los motores de búsqueda como Google y Yahoo! utilizar técnicas de agrupamiento para agrupar datos con características similares.

  • Los grupos de noticias utilizan técnicas de agrupación en clústeres para agrupar varios artículos según temas relacionados.

El motor de agrupamiento revisa los datos de entrada por completo y, en función de las características de los datos, decidirá en qué grupo se debe agrupar. Eche un vistazo al siguiente ejemplo.

Nuestra biblioteca de tutoriales contiene temas sobre varios temas. Cuando recibimos un nuevo tutorial en TutorialsPoint, es procesado por un motor de agrupamiento que decide, según su contenido, dónde debe agruparse.

Este capítulo le enseña cómo configurar mahout. Java y Hadoop son los requisitos previos de mahout. A continuación, se muestran los pasos para descargar e instalar Java, Hadoop y Mahout.

Configuración previa a la instalación

Antes de instalar Hadoop en un entorno Linux, necesitamos configurar Linux usando ssh(Cubierta segura). Siga los pasos que se mencionan a continuación para configurar el entorno Linux.

Crear un usuario

Se recomienda crear un usuario separado para Hadoop para aislar el sistema de archivos Hadoop del sistema de archivos Unix. Siga los pasos que se indican a continuación para crear un usuario:

  • Abra la raíz con el comando "su".

  • Cree un usuario desde la cuenta raíz usando el comando “useradd username”.

  • Ahora puede abrir una cuenta de usuario existente usando el comando “su username”.

  • Abra la terminal de Linux y escriba los siguientes comandos para crear un usuario.

$ su
password:
# useradd hadoop
# passwd hadoop
New passwd:
Retype new passwd

Configuración de SSH y generación de claves

La configuración de SSH es necesaria para realizar diferentes operaciones en un clúster, como iniciar, detener y distribuir operaciones de shell de demonio. Para autenticar a diferentes usuarios de Hadoop, es necesario proporcionar un par de claves pública / privada para un usuario de Hadoop y compartirlo con diferentes usuarios.

Los siguientes comandos se utilizan para generar un par clave-valor mediante SSH, copiar el formulario de claves públicas id_rsa.pub en authorized_keys y proporcionar permisos de propietario, lectura y escritura al archivo autorizado_keys respectivamente.

$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

Verificando ssh

ssh localhost

Instalación de Java

Java es el principal requisito previo para Hadoop y HBase. En primer lugar, debe verificar la existencia de Java en su sistema usando "java -version". La sintaxis del comando de la versión de Java se proporciona a continuación.

$ java -version

Debería producir el siguiente resultado.

java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)

Si no tiene Java instalado en su sistema, siga los pasos que se indican a continuación para instalar Java.

Step 1

Descargue java (JDK <última versión> - X64.tar.gz) visitando el siguiente enlace: Oracle

Luego jdk-7u71-linux-x64.tar.gz is downloaded en su sistema.

Step 2

Generalmente, encontrará el archivo Java descargado en la carpeta Descargas. Verifíquelo y extraiga eljdk-7u71-linux-x64.gz archivo usando los siguientes comandos.

$ cd Downloads/
$ ls
jdk-7u71-linux-x64.gz
$ tar zxf jdk-7u71-linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-linux-x64.gz

Step 3

Para que Java esté disponible para todos los usuarios, debe moverlo a la ubicación “/ usr / local /”. Abra root y escriba los siguientes comandos.

$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit

Step 4

Para configurar PATH y JAVA_HOME variables, agregue los siguientes comandos a ~/.bashrc file.

export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH= $PATH:$JAVA_HOME/bin

Ahora, verifique el java -version comando desde la terminal como se explicó anteriormente.

Descargando Hadoop

Después de instalar Java, primero debe instalar Hadoop. Verifique la existencia de Hadoop usando el comando "Versión de Hadoop" como se muestra a continuación.

hadoop version

Debería producir el siguiente resultado:

Hadoop 2.6.0
Compiled by jenkins on 2014-11-13T21:10Z
Compiled with protoc 2.5.0
From source with checksum 18e43357c8f927c0695f1e9522859d6a
This command was run using /home/hadoop/hadoop/share/hadoop/common/hadoopcommon-2.6.0.jar

Si su sistema no puede localizar Hadoop, descargue Hadoop e instálelo en su sistema. Siga los comandos que se indican a continuación para hacerlo.

Descargue y extraiga hadoop-2.6.0 de la base de software apache usando los siguientes comandos.

$ su
password:
# cd /usr/local
# wget http://mirrors.advancedhosters.com/apache/hadoop/common/hadoop-
2.6.0/hadoop-2.6.0-src.tar.gz
# tar xzf hadoop-2.6.0-src.tar.gz
# mv hadoop-2.6.0/* hadoop/
# exit

Instalación de Hadoop

Instale Hadoop en cualquiera de los modos necesarios. Aquí, estamos demostrando las funcionalidades de HBase en modo pseudodistribuido, por lo tanto, instale Hadoop en modo pseudodistribuido.

Siga los pasos que se indican a continuación para instalar Hadoop 2.4.1 en su sistema.

Paso 1: configurar Hadoop

Puede configurar las variables de entorno de Hadoop agregando los siguientes comandos a ~/.bashrc archivo.

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME

Ahora, aplique todos los cambios en el sistema actualmente en ejecución.

$ source ~/.bashrc

Paso 2: Configuración de Hadoop

Puede encontrar todos los archivos de configuración de Hadoop en la ubicación “$ HADOOP_HOME / etc / hadoop”. Es necesario realizar cambios en esos archivos de configuración de acuerdo con su infraestructura de Hadoop.

$ cd $HADOOP_HOME/etc/hadoop

Para desarrollar programas Hadoop en Java, necesita restablecer las variables de entorno de Java en hadoop-env.sh archivo reemplazando JAVA_HOME valor con la ubicación de Java en su sistema.

export JAVA_HOME=/usr/local/jdk1.7.0_71

A continuación se muestra la lista de archivos que debe editar para configurar Hadoop.

core-site.xml

los core-site.xml El archivo contiene información como el número de puerto utilizado para la instancia de Hadoop, la memoria asignada para el sistema de archivos, el límite de memoria para almacenar datos y el tamaño de los búferes de lectura / escritura.

Abra core-site.xml y agregue la siguiente propiedad entre las etiquetas <configuration>, </configuration>:

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:9000</value>
   </property>
</configuration>

hdfs-site.xm

los hdfs-site.xmlEl archivo contiene información como el valor de los datos de replicación, la ruta del nodo de nombre y las rutas del nodo de datos de sus sistemas de archivos locales. Significa el lugar donde desea almacenar la infraestructura de Hadoop.

Supongamos los siguientes datos:

dfs.replication (data replication value) = 1

(In the below given path /hadoop/ is the user name.
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.)
namenode path = //home/hadoop/hadoopinfra/hdfs/namenode

(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.)
datanode path = //home/hadoop/hadoopinfra/hdfs/datanode

Abra este archivo y agregue las siguientes propiedades entre las etiquetas <configuration>, </configuration> en este archivo.

<configuration>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>
	
   <property>
      <name>dfs.name.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/namenode</value>
   </property>
	
   <property>
      <name>dfs.data.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/datanode</value>
   </property>
</configuration>

Note:En el archivo anterior, todos los valores de propiedad son definidos por el usuario. Puede realizar cambios de acuerdo con su infraestructura de Hadoop.

mapred-site.xml

Este archivo se utiliza para configurar hilo en Hadoop. Abra el archivo mapred-site.xml y agregue la siguiente propiedad entre las etiquetas <configuration>, </configuration> en este archivo.

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
   </property>
</configuration>

mapred-site.xml

Este archivo se utiliza para especificar qué marco MapReduce estamos usando. De forma predeterminada, Hadoop contiene una plantilla de mapred-site.xml. En primer lugar, es necesario copiar el archivo demapred-site.xml.template a mapred-site.xml archivo usando el siguiente comando.

$ cp mapred-site.xml.template mapred-site.xml

Abierto mapred-site.xml y agregue las siguientes propiedades entre las etiquetas <configuration>, </configuration> en este archivo.

<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

Verificación de la instalación de Hadoop

Los siguientes pasos se utilizan para verificar la instalación de Hadoop.

Paso 1: Configuración del nodo de nombre

Configure el namenode usando el comando "hdfs namenode -format" de la siguiente manera:

$ cd ~
$ hdfs namenode -format

El resultado esperado es el siguiente:

10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = localhost/192.168.1.11
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 2.4.1
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted.
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to retain
1 images with txid >= 0
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11
************************************************************/

Paso 2: verificar Hadoop dfs

El siguiente comando se usa para iniciar dfs. Este comando inicia su sistema de archivos Hadoop.

$ start-dfs.sh

El resultado esperado es el siguiente:

10/24/14 21:37:56
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-namenode-localhost.out
localhost: starting datanode, logging to /home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-datanode-localhost.out
Starting secondary namenodes [0.0.0.0]

Paso 3: Verificación del guión de hilo

El siguiente comando se utiliza para iniciar el guión de hilo. La ejecución de este comando iniciará sus demonios de hilo.

$ start-yarn.sh

El resultado esperado es el siguiente:

starting yarn daemons
starting resource manager, logging to /home/hadoop/hadoop-2.4.1/logs/yarn-
hadoop-resourcemanager-localhost.out
localhost: starting node manager, logging to /home/hadoop/hadoop-
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out

Paso 4: Acceder a Hadoop en el navegador

El número de puerto predeterminado para acceder a hadoop es 50070. Utilice la siguiente URL para obtener los servicios de Hadoop en su navegador.

http://localhost:50070/

Paso 5: verificar todas las aplicaciones para el clúster

El número de puerto predeterminado para acceder a todas las aplicaciones del clúster es 8088. Utilice la siguiente URL para visitar este servicio.

http://localhost:8088/

Descargando Mahout

Mahout está disponible en el sitio web Mahout . Descarga Mahout desde el enlace proporcionado en el sitio web. Aquí está la captura de pantalla del sitio web.

Paso 1

Descarga Apache mahout desde el enlace http://mirror.nexcess.net/apache/mahout/ usando el siguiente comando.

[[email protected] ~]$ wget
http://mirror.nexcess.net/apache/mahout/0.9/mahout-distribution-0.9.tar.gz

Luego mahout-distribution-0.9.tar.gz se descargará en su sistema.

Paso 2

Navegue por la carpeta donde mahout-distribution-0.9.tar.gz se almacena y extrae el archivo jar descargado como se muestra a continuación.

[[email protected] ~]$ tar zxvf mahout-distribution-0.9.tar.gz

Repositorio de Maven

A continuación se muestra el archivo pom.xml para construir Apache Mahout usando Eclipse.

<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>

Este capítulo cubre la popular técnica de aprendizaje automático llamada recommendation, sus mecanismos y cómo escribir una aplicación que implemente la recomendación de Mahout.

Recomendación

¡Alguna vez se preguntó cómo Amazon crea una lista de artículos recomendados para llamar su atención sobre un producto en particular que podría interesarle!

Suponga que desea comprar el libro "Mahout en acción" de Amazon:

Junto con el producto seleccionado, Amazon también muestra una lista de artículos recomendados relacionados, como se muestra a continuación.

Estas listas de recomendaciones se elaboran con la ayuda de recommender engines. Mahout proporciona motores de recomendación de varios tipos, tales como:

  • recomendadores basados ​​en el usuario,
  • recomendadores basados ​​en artículos, y
  • varios otros algoritmos.

Motor de recomendación Mahout

Mahout tiene un motor de recomendación no distribuido y no basado en Hadoop. Debe pasar un documento de texto con las preferencias del usuario para los elementos. Y el resultado de este motor serían las preferencias estimadas de un usuario en particular para otros elementos.

Ejemplo

Considere un sitio web que venda bienes de consumo como teléfonos móviles, dispositivos y sus accesorios. Si queremos implementar las características de Mahout en tal sitio, entonces podemos construir un motor de recomendación. Este motor analiza los datos de compras anteriores de los usuarios y recomienda nuevos productos basados ​​en eso.

Los componentes proporcionados por Mahout para construir un motor de recomendación son los siguientes:

  • DataModel
  • UserSimilarity
  • ItemSimilarity
  • UserNeighborhood
  • Recommender

Desde el almacén de datos, se prepara el modelo de datos y se pasa como entrada al motor de recomendación. El motor de recomendación genera las recomendaciones para un usuario en particular. A continuación se muestra la arquitectura del motor de recomendación.

Arquitectura del motor de recomendación

Construyendo un Recomendador usando Mahout

Estos son los pasos para desarrollar un recomendador simple:

Paso 1: crear objeto DataModel

El constructor de PearsonCorrelationSimilarityLa clase requiere un objeto de modelo de datos, que contiene un archivo que contiene los detalles de Usuarios, Elementos y Preferencias de un producto. Aquí está el archivo de modelo de datos de muestra:

1,00,1.0
1,01,2.0
1,02,5.0
1,03,5.0
1,04,5.0

2,00,1.0
2,01,2.0
2,05,5.0
2,06,4.5
2,02,5.0

3,01,2.5
3,02,5.0
3,03,4.0
3,04,3.0

4,00,5.0
4,01,5.0
4,02,5.0
4,03,0.0

los DataModelobjeto requiere el objeto de archivo, que contiene la ruta del archivo de entrada. Crea elDataModel objeto como se muestra a continuación.

DataModel datamodel = new FileDataModel(new File("input file"));

Paso 2: Crear objeto UserSimilarity

Crear UserSimilarity objeto usando PearsonCorrelationSimilarity clase como se muestra a continuación:

UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);

Paso 3: crear objeto UserNeighborhood

Este objeto calcula un "vecindario" de usuarios como un usuario determinado. Hay dos tipos de barrios:

  • NearestNUserNeighborhood- Esta clase calcula una vecindad que consta de los n usuarios más cercanos a un usuario dado. "Más cercano" se define por la UserSimilarity dada.

  • ThresholdUserNeighborhood- Esta clase calcula una vecindad que consiste en todos los usuarios cuya similitud con el usuario dado alcanza o excede un cierto umbral. La similitud está definida por la UserSimilarity dada.

Aquí estamos usando ThresholdUserNeighborhood y establezca el límite de preferencia en 3.0.

UserNeighborhood neighborhood = new ThresholdUserNeighborhood(3.0, similarity, model);

Paso 4: crear objeto de recomendación

Crear UserbasedRecomenderobjeto. Pase todos los objetos creados anteriormente a su constructor como se muestra a continuación.

UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);

Paso 5: recomendar artículos a un usuario

Recomendar productos a un usuario mediante el método de recomendación () de Recommenderinterfaz. Este método requiere dos parámetros. El primero representa el ID de usuario del usuario al que necesitamos enviar las recomendaciones y el segundo representa el número de recomendaciones a enviar. Aquí está el uso derecommender() método:

List<RecommendedItem> recommendations = recommender.recommend(2, 3);

for (RecommendedItem recommendation : recommendations) {
   System.out.println(recommendation);
 }

Example Program

A continuación se muestra un programa de ejemplo para establecer recomendaciones. Prepare las recomendaciones para el usuario con id de usuario 2.

import java.io.File;
import java.util.List;

import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.UserBasedRecommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;

public class Recommender {
   public static void main(String args[]){
      try{
         //Creating data model
         DataModel datamodel = new FileDataModel(new File("data")); //data
      
         //Creating UserSimilarity object.
         UserSimilarity usersimilarity = new PearsonCorrelationSimilarity(datamodel);
      
         //Creating UserNeighbourHHood object.
         UserNeighborhood userneighborhood = new ThresholdUserNeighborhood(3.0, usersimilarity, datamodel);
      
         //Create UserRecomender
         UserBasedRecommender recommender = new GenericUserBasedRecommender(datamodel, userneighborhood, usersimilarity);
        
         List<RecommendedItem> recommendations = recommender.recommend(2, 3);
			
         for (RecommendedItem recommendation : recommendations) {
            System.out.println(recommendation);
         }
      
      }catch(Exception e){}
      
   }
  }

Compile el programa usando los siguientes comandos:

javac Recommender.java
java Recommender

Debería producir el siguiente resultado:

RecommendedItem [item:3, value:4.5]
RecommendedItem [item:4, value:4.0]

La agrupación en clústeres es el procedimiento para organizar elementos o elementos de una colección determinada en grupos según la similitud entre los elementos. Por ejemplo, las aplicaciones relacionadas con la publicación de noticias en línea agrupan sus artículos de noticias mediante clustering.

Aplicaciones de la agrupación en clústeres

  • La agrupación en clústeres se utiliza ampliamente en muchas aplicaciones, como la investigación de mercado, el reconocimiento de patrones, el análisis de datos y el procesamiento de imágenes.

  • La agrupación en clústeres puede ayudar a los especialistas en marketing a descubrir grupos distintos en su base de clientes. Y pueden caracterizar a sus grupos de clientes basándose en patrones de compra.

  • En el campo de la biología, se puede utilizar para derivar taxonomías de plantas y animales, categorizar genes con una funcionalidad similar y obtener información sobre las estructuras inherentes a las poblaciones.

  • La agrupación ayuda a identificar áreas de uso similar de la tierra en una base de datos de observación de la tierra.

  • La agrupación en clústeres también ayuda a clasificar documentos en la web para el descubrimiento de información.

  • La agrupación en clústeres se utiliza en aplicaciones de detección de valores atípicos, como la detección de fraudes con tarjetas de crédito.

  • Como función de minería de datos, el análisis de clústeres sirve como una herramienta para obtener información sobre la distribución de datos para observar las características de cada clúster.

Con Mahout, podemos agrupar un conjunto de datos determinado. Los pasos necesarios son los siguientes:

  • Algorithm Debe seleccionar un algoritmo de agrupamiento adecuado para agrupar los elementos de un clúster.

  • Similarity and Dissimilarity Debe tener una regla para verificar la similitud entre los elementos recién encontrados y los elementos de los grupos.

  • Stopping Condition Se requiere una condición de detención para definir el punto en el que no se requiere agrupamiento.

Procedimiento de agrupación

Para agrupar los datos proporcionados, necesita:

  • Inicie el servidor Hadoop. Cree los directorios necesarios para almacenar archivos en Hadoop File System. (Cree directorios para archivo de entrada, archivo de secuencia y salida agrupada en caso de canopy).

  • Copie el archivo de entrada al sistema de archivos Hadoop desde el sistema de archivos Unix.

  • Prepare el archivo de secuencia a partir de los datos de entrada.

  • Ejecute cualquiera de los algoritmos de agrupación disponibles.

  • Obtenga los datos agrupados.

Iniciando Hadoop

Mahout funciona con Hadoop, por lo tanto, asegúrese de que el servidor Hadoop esté en funcionamiento.

$ cd HADOOP_HOME/bin
$ start-all.sh

Preparación de directorios de archivos de entrada

Cree directorios en el sistema de archivos de Hadoop para almacenar el archivo de entrada, los archivos de secuencia y los datos agrupados con el siguiente comando:

$ hadoop fs -p mkdir /mahout_data
$ hadoop fs -p mkdir /clustered_data
$ hadoop fs -p mkdir /mahout_seq

Puede verificar si el directorio se creó utilizando la interfaz web de hadoop en la siguiente URL: http://localhost:50070/

Le da la salida como se muestra a continuación:

Copiar archivo de entrada a HDFS

Ahora, copie el archivo de datos de entrada del sistema de archivos de Linux al directorio mahout_data en el sistema de archivos de Hadoop como se muestra a continuación. Suponga que su archivo de entrada es mydata.txt y está en el directorio / home / Hadoop / data /.

$ hadoop fs -put /home/Hadoop/data/mydata.txt /mahout_data/

Preparar el archivo de secuencia

Mahout le proporciona una utilidad para convertir el archivo de entrada dado a un formato de archivo de secuencia. Esta utilidad requiere dos parámetros.

  • El directorio de archivos de entrada donde residen los datos originales.
  • El directorio de archivos de salida donde se almacenarán los datos agrupados.

A continuación se muestra el mensaje de ayuda de mahout seqdirectory utilidad.

Step 1:Busque el directorio de inicio de Mahout. Puede obtener ayuda de la utilidad como se muestra a continuación:

[[email protected] bin]$ ./mahout seqdirectory --help
Job-Specific Options:
--input (-i) input Path to job input directory.
--output (-o) output The directory pathname for output.
--overwrite (-ow) If present, overwrite the output directory

Genere el archivo de secuencia usando la utilidad usando la siguiente sintaxis:

mahout seqdirectory -i <input file path> -o <output directory>

Example

mahout seqdirectory
-i hdfs://localhost:9000/mahout_seq/
-o hdfs://localhost:9000/clustered_data/

Algoritmos de agrupación

Mahout admite dos algoritmos principales para la agrupación en clústeres, a saber:

  • Agrupación de dosel
  • Agrupación de K-medias

Agrupación de dosel

La agrupación en clústeres de dosel es una técnica sencilla y rápida utilizada por Mahout con fines de agrupación. Los objetos se tratarán como puntos en un espacio plano. Esta técnica se utiliza a menudo como un paso inicial en otras técnicas de agrupamiento, como el agrupamiento de k-medias. Puede ejecutar un trabajo de Canopy con la siguiente sintaxis:

mahout canopy -i <input vectors directory>
-o <output directory>
-t1 <threshold value 1>
-t2 <threshold value 2>

El trabajo de Canopy requiere un directorio de archivos de entrada con el archivo de secuencia y un directorio de salida donde se almacenarán los datos agrupados.

Example

mahout canopy -i hdfs://localhost:9000/mahout_seq/mydata.seq
-o hdfs://localhost:9000/clustered_data
-t1 20
-t2 30

Obtendrá los datos agrupados generados en el directorio de salida dado.

Agrupación de K-means

La agrupación en clústeres de K-medias es un algoritmo de agrupación importante. El algoritmo de agrupación de k en k-medias representa el número de agrupaciones en las que se dividirán los datos. Por ejemplo, el valor k especificado para este algoritmo se selecciona como 3, el algoritmo dividirá los datos en 3 grupos.

Cada objeto se representará como un vector en el espacio. Inicialmente, el algoritmo elegirá k puntos al azar y se tratarán como centros, todos los objetos más cercanos a cada centro se agrupan. Existen varios algoritmos para la medida de distancia y el usuario debe elegir el requerido.

Creating Vector Files

  • A diferencia del algoritmo Canopy, el algoritmo k-means requiere archivos vectoriales como entrada, por lo tanto, debe crear archivos vectoriales.

  • Para generar archivos vectoriales a partir del formato de archivo de secuencia, Mahout proporciona la seq2parse utilidad.

A continuación se presentan algunas de las opciones de seq2parseutilidad. Cree archivos vectoriales usando estas opciones.

$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.

Después de crear vectores, proceda con el algoritmo k-means. La sintaxis para ejecutar el trabajo k-means es la siguiente:

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>

El trabajo de agrupación de K-means requiere un directorio de vectores de entrada, un directorio de agrupaciones de salida, una medida de distancia, el número máximo de iteraciones que se llevarán a cabo y un valor entero que represente la cantidad de agrupaciones en las que se dividirán los datos de entrada.

¿Qué es la clasificación?

La clasificación es una técnica de aprendizaje automático que utiliza datos conocidos para determinar cómo se deben clasificar los nuevos datos en un conjunto de categorías existentes. Por ejemplo,

  • La aplicación iTunes usa la clasificación para preparar listas de reproducción.

  • Los proveedores de servicios de correo como Yahoo! y Gmail utilizan esta técnica para decidir si un correo nuevo debe clasificarse como spam. El algoritmo de categorización se entrena a sí mismo mediante el análisis de los hábitos de los usuarios de marcar ciertos correos como spam. En base a eso, el clasificador decide si un correo futuro debe depositarse en su bandeja de entrada o en la carpeta de spam.

Cómo funciona la clasificación

Al clasificar un conjunto de datos dado, el sistema de clasificación realiza las siguientes acciones:

  • Inicialmente, se prepara un nuevo modelo de datos utilizando cualquiera de los algoritmos de aprendizaje.
  • Luego, se prueba el modelo de datos preparado.
  • A partir de entonces, este modelo de datos se utiliza para evaluar los nuevos datos y determinar su clase.

Aplicaciones de clasificación

  • Credit card fraud detection- El mecanismo de clasificación se utiliza para predecir fraudes con tarjetas de crédito. Utilizando información histórica de fraudes anteriores, el clasificador puede predecir qué transacciones futuras pueden convertirse en fraudes.

  • Spam e-mails - Dependiendo de las características de los correos electrónicos no deseados anteriores, el clasificador determina si un correo electrónico recién encontrado debe enviarse a la carpeta de correo no deseado.

Clasificador ingenuo de Bayes

Mahout utiliza el algoritmo clasificador Naive Bayes. Utiliza dos implementaciones:

  • Clasificación distribuida de Naive Bayes
  • Clasificación complementaria de Naive Bayes

Naive Bayes es una técnica simple para construir clasificadores. No es un algoritmo único para entrenar tales clasificadores, sino una familia de algoritmos. Un clasificador de Bayes construye modelos para clasificar instancias de problemas. Estas clasificaciones se realizan utilizando los datos disponibles.

Una ventaja de Bayes ingenuo es que solo requiere una pequeña cantidad de datos de entrenamiento para estimar los parámetros necesarios para la clasificación.

Para algunos tipos de modelos de probabilidad, los clasificadores de Bayes ingenuos se pueden entrenar de manera muy eficiente en un entorno de aprendizaje supervisado.

A pesar de sus suposiciones simplificadas, los clasificadores de Bayes ingenuos han funcionado bastante bien en muchas situaciones complejas del mundo real.

Procedimiento de clasificación

Se deben seguir los siguientes pasos para implementar la Clasificación:

  • Generar datos de ejemplo
  • Crea archivos de secuencia a partir de datos
  • Convertir archivos de secuencia en vectores
  • Entrena los vectores
  • Prueba los vectores

Paso 1: generar datos de ejemplo

Genere o descargue los datos a clasificar. Por ejemplo, puede obtener el20 newsgroups datos de ejemplo del siguiente enlace: http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz

Cree un directorio para almacenar datos de entrada. Descargue el ejemplo como se muestra a continuación.

$ mkdir classification_example
$ cd classification_example
$tar xzvf 20news-bydate.tar.gz
wget http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz

Paso 2: crear archivos de secuencia

Cree un archivo de secuencia a partir del ejemplo usando seqdirectoryutilidad. La sintaxis para generar la secuencia se da a continuación:

mahout seqdirectory -i <input file path> -o <output directory>

Paso 3: convertir archivos de secuencia en vectores

Cree archivos vectoriales a partir de archivos de secuencia usando seq2parseutilidad. Las opciones deseq2parse utilidad se dan a continuación:

$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.

Paso 4: entrenar los vectores

Entrene los vectores generados usando el trainnbutilidad. Las opciones a utilizartrainnb utilidad se dan a continuación:

mahout trainnb
 -i ${PATH_TO_TFIDF_VECTORS}
 -el
 -o ${PATH_TO_MODEL}/model
 -li ${PATH_TO_MODEL}/labelindex
 -ow
 -c

Paso 5: prueba los vectores

Pruebe los vectores usando testnbutilidad. Las opciones a utilizartestnb utilidad se dan a continuación:

mahout testnb
 -i ${PATH_TO_TFIDF_TEST_VECTORS}
 -m ${PATH_TO_MODEL}/model
 -l ${PATH_TO_MODEL}/labelindex
 -ow
 -o ${PATH_TO_OUTPUT}
 -c
 -seq