Mahout - Guide rapide

Nous vivons à une époque où les informations sont disponibles en abondance. La surcharge d'informations a atteint des sommets tels qu'il devient parfois difficile de gérer nos petites boîtes aux lettres! Imaginez le volume de données et d'enregistrements que certains des sites Web populaires (comme Facebook, Twitter et Youtube) doivent collecter et gérer quotidiennement. Il n'est pas rare même pour des sites Web moins connus de recevoir d'énormes quantités d'informations en vrac.

Normalement, nous recourons aux algorithmes d'exploration de données pour analyser les données en vrac afin d'identifier les tendances et tirer des conclusions. Cependant, aucun algorithme d'exploration de données ne peut être suffisamment efficace pour traiter de très grands ensembles de données et fournir des résultats rapidement, à moins que les tâches de calcul ne soient exécutées sur plusieurs machines réparties sur le cloud.

Nous avons maintenant de nouveaux frameworks qui nous permettent de décomposer une tâche de calcul en plusieurs segments et d'exécuter chaque segment sur une machine différente. Mahout est un tel cadre d'exploration de données qui fonctionne normalement en combinaison avec l'infrastructure Hadoop en arrière-plan pour gérer d'énormes volumes de données.

Qu'est-ce qu'Apache Mahout?

Un mahout est celui qui conduit un éléphant comme son maître. Le nom vient de son association étroite avec Apache Hadoop qui utilise un éléphant comme logo.

Hadoop est un framework open-source d'Apache qui permet de stocker et de traiter le Big Data dans un environnement distribué sur des clusters d'ordinateurs à l'aide de modèles de programmation simples.

Apache Mahoutest un projet open source qui est principalement utilisé pour créer des algorithmes d'apprentissage automatique évolutifs. Il met en œuvre des techniques d'apprentissage automatique populaires telles que:

  • Recommendation
  • Classification
  • Clustering

Apache Mahout a débuté en tant que sous-projet de Lucene d'Apache en 2008. En 2010, Mahout est devenu un projet de haut niveau d'Apache.

Caractéristiques de Mahout

Les fonctionnalités primitives d'Apache Mahout sont répertoriées ci-dessous.

  • Les algorithmes de Mahout sont écrits sur Hadoop, donc cela fonctionne bien dans un environnement distribué. Mahout utilise la bibliothèque Apache Hadoop pour évoluer efficacement dans le cloud.

  • Mahout offre au codeur un cadre prêt à l'emploi pour effectuer des tâches d'exploration de données sur de gros volumes de données.

  • Mahout permet aux applications d'analyser de grands ensembles de données de manière efficace et rapide.

  • Inclut plusieurs implémentations de clustering activées par MapReduce telles que les k-means, les k-means floues, Canopy, Dirichlet et Mean-Shift.

  • Prend en charge les implémentations de classification Naive Bayes distribuées et Complementary Naive Bayes.

  • Livré avec des capacités de fonction de remise en forme distribuées pour une programmation évolutive.

  • Comprend des bibliothèques matricielles et vectorielles.

Applications de Mahout

  • Des entreprises comme Adobe, Facebook, LinkedIn, Foursquare, Twitter et Yahoo utilisent Mahout en interne.

  • Foursquare vous aide à découvrir les lieux, la nourriture et les divertissements disponibles dans une zone particulière. Il utilise le moteur de recommandation de Mahout.

  • Twitter utilise Mahout pour la modélisation des intérêts des utilisateurs.

  • Yahoo! utilise Mahout pour l'exploration de modèles.

Apache Mahout est une bibliothèque d'apprentissage automatique hautement évolutive qui permet aux développeurs d'utiliser des algorithmes optimisés. Mahout met en œuvre des techniques d'apprentissage automatique populaires telles que la recommandation, la classification et le clustering. Par conséquent, il est prudent d'avoir une brève section sur l'apprentissage automatique avant d'aller plus loin.

Qu'est-ce que l'apprentissage automatique?

L'apprentissage automatique est une branche de la science qui traite de la programmation des systèmes de manière à ce qu'ils apprennent et s'améliorent automatiquement avec l'expérience. Ici, apprendre signifie reconnaître et comprendre les données d'entrée et prendre des décisions éclairées en fonction des données fournies.

Il est très difficile de répondre à toutes les décisions basées sur toutes les contributions possibles. Pour résoudre ce problème, des algorithmes sont développés. Ces algorithmes construisent des connaissances à partir de données spécifiques et d'expériences passées avec les principes de la statistique, de la théorie des probabilités, de la logique, de l'optimisation combinatoire, de la recherche, de l'apprentissage par renforcement et de la théorie du contrôle.

Les algorithmes développés forment la base de diverses applications telles que:

  • Traitement de la vision
  • Traitement du langage
  • Prévisions (par exemple, tendances boursières)
  • La reconnaissance de formes
  • Games
  • Exploration de données
  • Systèmes experts
  • Robotics

L'apprentissage automatique est un vaste domaine et il est tout à fait au-delà de la portée de ce tutoriel de couvrir toutes ses fonctionnalités. Il existe plusieurs façons de mettre en œuvre des techniques d'apprentissage automatique, mais les plus couramment utilisées sontsupervised et unsupervised learning.

Enseignement supervisé

L'apprentissage supervisé consiste à apprendre une fonction à partir des données de formation disponibles. Un algorithme d'apprentissage supervisé analyse les données d'apprentissage et produit une fonction déduite, qui peut être utilisée pour cartographier de nouveaux exemples. Voici des exemples courants d'apprentissage supervisé:

  • classer les e-mails comme spam,
  • étiqueter les pages Web en fonction de leur contenu, et
  • reconnaissance vocale.

Il existe de nombreux algorithmes d'apprentissage supervisé tels que les réseaux de neurones, les machines vectorielles de soutien (SVM) et les classificateurs Naive Bayes. Mahout implémente le classificateur Naive Bayes.

Apprentissage non supervisé

L'apprentissage non supervisé donne du sens aux données non étiquetées sans avoir aucun ensemble de données prédéfini pour son apprentissage. L'apprentissage non supervisé est un outil extrêmement puissant pour analyser les données disponibles et rechercher des modèles et des tendances. Il est le plus couramment utilisé pour regrouper des entrées similaires dans des groupes logiques. Les approches courantes de l'apprentissage non supervisé comprennent:

  • k-means
  • des cartes auto-organisées, et
  • classification hiérarchique

Recommandation

La recommandation est une technique populaire qui fournit des recommandations précises basées sur des informations utilisateur telles que les achats précédents, les clics et les évaluations.

  • Amazon utilise cette technique pour afficher une liste d'articles recommandés qui pourraient vous intéresser, en tirant des informations de vos actions passées. Il existe des moteurs de recommandation qui fonctionnent derrière Amazon pour capturer le comportement des utilisateurs et recommander des éléments sélectionnés en fonction de vos actions précédentes.

  • Facebook utilise la technique de recommandation pour identifier et recommander les «personnes que vous connaissez peut-être».

Classification

Classification, également appelée categorization, est une technique d'apprentissage automatique qui utilise des données connues pour déterminer comment les nouvelles données doivent être classées dans un ensemble de catégories existantes. La classification est une forme d'apprentissage supervisé.

  • Les fournisseurs de services de messagerie tels que Yahoo! et Gmail utilisent cette technique pour décider si un nouveau courrier doit être classé comme spam. L'algorithme de catégorisation s'entraîne en analysant les habitudes des utilisateurs de marquer certains mails comme des spams. Sur cette base, le classificateur décide si un futur courrier doit être déposé dans votre boîte de réception ou dans le dossier des spams.

  • L'application iTunes utilise la classification pour préparer des listes de lecture.

Clustering

Le regroupement est utilisé pour former des groupes ou des grappes de données similaires basées sur des caractéristiques communes. Le clustering est une forme d'apprentissage non supervisé.

  • Les moteurs de recherche tels que Google et Yahoo! utiliser des techniques de regroupement pour regrouper des données ayant des caractéristiques similaires.

  • Les groupes de discussion utilisent des techniques de regroupement pour regrouper divers articles en fonction de sujets connexes.

Le moteur de clustering parcourt complètement les données d'entrée et en fonction des caractéristiques des données, il décidera sous quel cluster il doit être regroupé. Jetez un œil à l'exemple suivant.

Notre bibliothèque de tutoriels contient des sujets sur divers sujets. Lorsque nous recevons un nouveau didacticiel sur TutorialsPoint, il est traité par un moteur de clustering qui décide, en fonction de son contenu, où il doit être regroupé.

Ce chapitre vous apprend à configurer mahout. Java et Hadoop sont les prérequis du mahout. Vous trouverez ci-dessous les étapes pour télécharger et installer Java, Hadoop et Mahout.

Configuration avant l'installation

Avant d'installer Hadoop dans un environnement Linux, nous devons configurer Linux en utilisant ssh(Enveloppe de protection). Suivez les étapes mentionnées ci-dessous pour configurer l'environnement Linux.

Créer un utilisateur

Il est recommandé de créer un utilisateur distinct pour Hadoop afin d'isoler le système de fichiers Hadoop du système de fichiers Unix. Suivez les étapes ci-dessous pour créer un utilisateur:

  • Ouvrez root en utilisant la commande «su».

  • Créez un utilisateur à partir du compte root à l'aide de la commande “useradd username”.

  • Vous pouvez maintenant ouvrir un compte utilisateur existant à l'aide de la commande “su username”.

  • Ouvrez le terminal Linux et tapez les commandes suivantes pour créer un utilisateur.

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

Configuration SSH et génération de clé

La configuration SSH est requise pour effectuer différentes opérations sur un cluster telles que le démarrage, l'arrêt et les opérations de shell de démon distribuées. Pour authentifier différents utilisateurs de Hadoop, il est nécessaire de fournir une paire de clés publique / privée pour un utilisateur Hadoop et de la partager avec différents utilisateurs.

Les commandes suivantes sont utilisées pour générer une paire clé / valeur à l'aide de SSH, copier le formulaire de clés publiques id_rsa.pub dans allowed_keys et fournir respectivement des autorisations de propriétaire, de lecture et d'écriture sur le fichier authorized_keys.

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

Vérification de SSH

ssh localhost

Installer Java

Java est le prérequis principal pour Hadoop et HBase. Tout d'abord, vous devez vérifier l'existence de Java dans votre système en utilisant «java -version». La syntaxe de la commande de version Java est donnée ci-dessous.

$ java -version

Il devrait produire la sortie suivante.

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 Java n'est pas installé sur votre système, suivez les étapes ci-dessous pour installer Java.

Step 1

Téléchargez java (JDK <dernière version> - X64.tar.gz) en visitant le lien suivant: Oracle

ensuite jdk-7u71-linux-x64.tar.gz is downloaded sur votre système.

Step 2

En règle générale, vous trouvez le fichier Java téléchargé dans le dossier Téléchargements. Vérifiez-le et extrayez lejdk-7u71-linux-x64.gz fichier à l'aide des commandes suivantes.

$ 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

Pour rendre Java disponible à tous les utilisateurs, vous devez le déplacer vers l'emplacement «/ usr / local /». Ouvrez root et saisissez les commandes suivantes.

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

Step 4

Pour la mise en place PATH et JAVA_HOME variables, ajoutez les commandes suivantes à ~/.bashrc file.

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

Maintenant, vérifiez le java -version commande depuis le terminal comme expliqué ci-dessus.

Téléchargement de Hadoop

Après avoir installé Java, vous devez d'abord installer Hadoop. Vérifiez l'existence de Hadoop à l'aide de la commande «Hadoop version» comme indiqué ci-dessous.

hadoop version

Il devrait produire la sortie suivante:

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 votre système ne parvient pas à localiser Hadoop, téléchargez Hadoop et installez-le sur votre système. Suivez les commandes ci-dessous pour ce faire.

Téléchargez et extrayez hadoop-2.6.0 de la fondation logicielle apache à l'aide des commandes suivantes.

$ 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

Installer Hadoop

Installez Hadoop dans l'un des modes requis. Ici, nous démontrons les fonctionnalités HBase en mode pseudo-distribué, donc installons Hadoop en mode pseudo-distribué.

Suivez les étapes ci-dessous pour installer Hadoop 2.4.1 sur votre système.

Étape 1: Configurer Hadoop

Vous pouvez définir des variables d'environnement Hadoop en ajoutant les commandes suivantes à ~/.bashrc fichier.

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

Maintenant, appliquez toutes les modifications dans le système en cours d'exécution.

$ source ~/.bashrc

Étape 2: Configuration Hadoop

Vous pouvez trouver tous les fichiers de configuration Hadoop à l'emplacement «$ HADOOP_HOME / etc / hadoop». Il est nécessaire d'apporter des modifications à ces fichiers de configuration en fonction de votre infrastructure Hadoop.

$ cd $HADOOP_HOME/etc/hadoop

Pour développer des programmes Hadoop en Java, vous devez réinitialiser les variables d'environnement Java dans hadoop-env.sh fichier en remplaçant JAVA_HOME valeur avec l'emplacement de Java dans votre système.

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

Vous trouverez ci-dessous la liste des fichiers que vous devez modifier pour configurer Hadoop.

core-site.xml

le core-site.xml fichier contient des informations telles que le numéro de port utilisé pour l'instance Hadoop, la mémoire allouée au système de fichiers, la limite de mémoire pour le stockage des données et la taille des tampons de lecture / écriture.

Ouvrez core-site.xml et ajoutez la propriété suivante entre les balises <configuration>, </configuration>:

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

hdfs-site.xm

le hdfs-site.xmlfichier contient des informations telles que la valeur des données de réplication, le chemin du namenode et les chemins du datanode de vos systèmes de fichiers locaux. Cela signifie l'endroit où vous souhaitez stocker l'infrastructure Hadoop.

Supposons les données suivantes:

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

Ouvrez ce fichier et ajoutez les propriétés suivantes entre les balises <configuration>, </configuration> de ce fichier.

<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:Dans le fichier ci-dessus, toutes les valeurs de propriété sont définies par l'utilisateur. Vous pouvez apporter des modifications en fonction de votre infrastructure Hadoop.

mapred-site.xml

Ce fichier est utilisé pour configurer le fil dans Hadoop. Ouvrez le fichier mapred-site.xml et ajoutez la propriété suivante entre les balises <configuration>, </configuration> de ce fichier.

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

mapred-site.xml

Ce fichier est utilisé pour spécifier le framework MapReduce que nous utilisons. Par défaut, Hadoop contient un modèle de mapred-site.xml. Tout d'abord, il est nécessaire de copier le fichier à partir demapred-site.xml.template à mapred-site.xml fichier à l'aide de la commande suivante.

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

Ouvert mapred-site.xml et ajoutez les propriétés suivantes entre les balises <configuration>, </configuration> dans ce fichier.

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

Vérification de l'installation de Hadoop

Les étapes suivantes sont utilisées pour vérifier l'installation de Hadoop.

Étape 1: Configuration du nœud de nom

Configurez le namenode à l'aide de la commande «hdfs namenode -format» comme suit:

$ cd ~
$ hdfs namenode -format

Le résultat attendu est le suivant:

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

Étape 2: vérification des fichiers DFS Hadoop

La commande suivante est utilisée pour démarrer dfs. Cette commande démarre votre système de fichiers Hadoop.

$ start-dfs.sh

Le résultat attendu est le suivant:

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]

Étape 3: vérification du script de fil

La commande suivante est utilisée pour démarrer le script yarn. L'exécution de cette commande démarrera vos démons de fil.

$ start-yarn.sh

Le résultat attendu est le suivant:

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

Étape 4: Accéder à Hadoop sur le navigateur

Le numéro de port par défaut pour accéder à hadoop est 50070. Utilisez l'URL suivante pour obtenir les services Hadoop sur votre navigateur.

http://localhost:50070/

Étape 5: vérifier toutes les applications pour le cluster

Le numéro de port par défaut pour accéder à toutes les applications du cluster est 8088. Utilisez l'URL suivante pour visiter ce service.

http://localhost:8088/

Téléchargement de Mahout

Mahout est disponible sur le site Mahout . Téléchargez Mahout à partir du lien fourni sur le site Web. Voici la capture d'écran du site Web.

Étape 1

Téléchargez Apache mahout à partir du lien http://mirror.nexcess.net/apache/mahout/ en utilisant la commande suivante.

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

ensuite mahout-distribution-0.9.tar.gz sera téléchargé dans votre système.

Étape 2

Parcourez le dossier où mahout-distribution-0.9.tar.gz est stocké et extrayez le fichier jar téléchargé comme indiqué ci-dessous.

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

Dépôt Maven

Vous trouverez ci-dessous le pom.xml pour construire Apache Mahout en utilisant 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>

Ce chapitre couvre la technique d'apprentissage automatique populaire appelée recommendation, ses mécanismes, et comment écrire une application mettant en œuvre la recommandation Mahout.

Recommandation

Vous êtes-vous déjà demandé comment Amazon propose une liste d'articles recommandés pour attirer votre attention sur un produit particulier qui pourrait vous intéresser!

Supposons que vous souhaitiez acheter le livre «Mahout in Action» sur Amazon:

En plus du produit sélectionné, Amazon affiche également une liste des articles recommandés associés, comme indiqué ci-dessous.

Ces listes de recommandations sont produites à l'aide de recommender engines. Mahout fournit des moteurs de recommandation de plusieurs types tels que:

  • recommandateurs basés sur les utilisateurs,
  • recommandateurs basés sur les articles, et
  • plusieurs autres algorithmes.

Moteur de recommandation Mahout

Mahout a un moteur de recommandation non distribué et non basé sur Hadoop. Vous devez transmettre un document texte ayant des préférences utilisateur pour les éléments. Et la sortie de ce moteur serait les préférences estimées d'un utilisateur particulier pour d'autres éléments.

Exemple

Pensez à un site Web qui vend des biens de consommation tels que des mobiles, des gadgets et leurs accessoires. Si nous voulons implémenter les fonctionnalités de Mahout dans un tel site, nous pouvons créer un moteur de recommandation. Ce moteur analyse les données d'achat passées des utilisateurs et recommande de nouveaux produits en fonction de cela.

Les composants fournis par Mahout pour construire un moteur de recommandation sont les suivants:

  • DataModel
  • UserSimilarity
  • ItemSimilarity
  • UserNeighborhood
  • Recommender

À partir du magasin de données, le modèle de données est préparé et transmis en tant qu'entrée au moteur de recommandation. Le moteur de recommandation génère les recommandations pour un utilisateur particulier. Vous trouverez ci-dessous l'architecture du moteur de recommandation.

Architecture du moteur de recommandation

Créer un recommandé avec Mahout

Voici les étapes pour développer un simple recommandateur:

Étape 1: créer un objet DataModel

Le constructeur de PearsonCorrelationSimilarityLa classe nécessite un objet de modèle de données, qui contient un fichier contenant les détails des utilisateurs, des éléments et des préférences d'un produit. Voici l'exemple de fichier de modèle de données:

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

le DataModelobject requiert l'objet fichier, qui contient le chemin du fichier d'entrée. Créer leDataModel objet comme indiqué ci-dessous.

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

Étape 2: créer un objet UserSimilarity

Créer UserSimilarity objet utilisant PearsonCorrelationSimilarity classe comme indiqué ci-dessous:

UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);

Étape 3: créer un objet UserNe Neighborhood

Cet objet calcule un "voisinage" d'utilisateurs comme un utilisateur donné. Il existe deux types de quartiers:

  • NearestNUserNeighborhood- Cette classe calcule un voisinage constitué des n utilisateurs les plus proches d'un utilisateur donné. "Nearest" est défini par la UserSimilarity donnée.

  • ThresholdUserNeighborhood- Cette classe calcule un voisinage constitué de tous les utilisateurs dont la similitude avec l'utilisateur donné atteint ou dépasse un certain seuil. La similarité est définie par la similitude utilisateur donnée.

Ici, nous utilisons ThresholdUserNeighborhood et définissez la limite de préférence à 3,0.

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

Étape 4: créer un objet de recommandation

Créer UserbasedRecomenderobjet. Passez tous les objets créés ci-dessus à son constructeur comme indiqué ci-dessous.

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

Étape 5: recommander des éléments à un utilisateur

Recommander des produits à un utilisateur en utilisant la méthode recommend () de Recommenderinterface. Cette méthode nécessite deux paramètres. Le premier représente l'identifiant de l'utilisateur auquel nous devons envoyer les recommandations, et le second représente le nombre de recommandations à envoyer. Voici l'utilisation derecommender() méthode:

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

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

Example Program

Vous trouverez ci-dessous un exemple de programme pour établir une recommandation. Préparez les recommandations pour l'utilisateur avec l'ID utilisateur 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){}
      
   }
  }

Compilez le programme à l'aide des commandes suivantes:

javac Recommender.java
java Recommender

Il devrait produire la sortie suivante:

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

Le clustering est la procédure pour organiser les éléments ou les éléments d'une collection donnée en groupes en fonction de la similitude entre les éléments. Par exemple, les applications liées à la publication d'actualités en ligne regroupent leurs articles d'actualité à l'aide du clustering.

Applications du clustering

  • Le regroupement est largement utilisé dans de nombreuses applications telles que les études de marché, la reconnaissance de formes, l'analyse de données et le traitement d'images.

  • Le clustering peut aider les spécialistes du marketing à découvrir des groupes distincts dans leur base de clients. Et ils peuvent caractériser leurs groupes de clients en fonction des modèles d'achat.

  • Dans le domaine de la biologie, il peut être utilisé pour dériver des taxonomies végétales et animales, catégoriser des gènes ayant des fonctionnalités similaires et avoir un aperçu des structures inhérentes aux populations.

  • Le regroupement aide à identifier les zones d'utilisation des terres similaires dans une base de données d'observation de la Terre.

  • Le clustering aide également à classer les documents sur le Web pour la découverte d'informations.

  • Le clustering est utilisé dans les applications de détection des valeurs aberrantes telles que la détection de fraude par carte de crédit.

  • En tant que fonction d'exploration de données, l'analyse de cluster sert d'outil pour obtenir un aperçu de la distribution des données afin d'observer les caractéristiques de chaque cluster.

En utilisant Mahout, nous pouvons regrouper un ensemble donné de données. Les étapes requises sont les suivantes:

  • Algorithm Vous devez sélectionner un algorithme de clustering approprié pour regrouper les éléments d'un cluster.

  • Similarity and Dissimilarity Vous devez avoir une règle en place pour vérifier la similitude entre les éléments nouvellement rencontrés et les éléments dans les groupes.

  • Stopping Condition Une condition d'arrêt est requise pour définir le point où aucune mise en cluster n'est requise.

Procédure de clustering

Pour regrouper les données données, vous devez -

  • Démarrez le serveur Hadoop. Créez les répertoires requis pour stocker les fichiers dans Hadoop File System. (Créez des répertoires pour le fichier d'entrée, le fichier de séquence et la sortie en cluster en cas de canopy).

  • Copiez le fichier d'entrée dans le système de fichiers Hadoop à partir du système de fichiers Unix.

  • Préparez le fichier de séquence à partir des données d'entrée.

  • Exécutez l'un des algorithmes de clustering disponibles.

  • Obtenez les données groupées.

Démarrer Hadoop

Mahout fonctionne avec Hadoop, assurez-vous donc que le serveur Hadoop est opérationnel.

$ cd HADOOP_HOME/bin
$ start-all.sh

Préparation des répertoires de fichiers d'entrée

Créez des répertoires dans le système de fichiers Hadoop pour stocker le fichier d'entrée, les fichiers de séquence et les données en cluster à l'aide de la commande suivante:

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

Vous pouvez vérifier si le répertoire est créé à l'aide de l'interface Web hadoop dans l'URL suivante - http://localhost:50070/

Il vous donne la sortie comme indiqué ci-dessous:

Copie du fichier d'entrée sur HDFS

Maintenant, copiez le fichier de données d'entrée du système de fichiers Linux dans le répertoire mahout_data du système de fichiers Hadoop comme indiqué ci-dessous. Supposons que votre fichier d'entrée est mydata.txt et qu'il se trouve dans le répertoire / home / Hadoop / data /.

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

Préparation du fichier de séquence

Mahout vous fournit un utilitaire pour convertir le fichier d'entrée donné dans un format de fichier de séquence. Cet utilitaire nécessite deux paramètres.

  • Le répertoire du fichier d'entrée où résident les données d'origine.
  • Le répertoire du fichier de sortie dans lequel les données en cluster doivent être stockées.

Ci-dessous est l'invite d'aide de mahout seqdirectory utilitaire.

Step 1:Accédez au répertoire de base de Mahout. Vous pouvez obtenir de l'aide de l'utilitaire comme indiqué ci-dessous:

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

Générez le fichier de séquence à l'aide de l'utilitaire en utilisant la syntaxe suivante:

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

Example

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

Algorithmes de clustering

Mahout prend en charge deux algorithmes principaux pour le clustering, à savoir:

  • Regroupement de la canopée
  • K-signifie clustering

Regroupement de la canopée

Le regroupement de canopées est une technique simple et rapide utilisée par Mahout à des fins de regroupement. Les objets seront traités comme des points dans un espace ordinaire. Cette technique est souvent utilisée comme étape initiale dans d'autres techniques de clustering telles que le clustering k-means. Vous pouvez exécuter une tâche Canopy en utilisant la syntaxe suivante:

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

Le travail Canopy nécessite un répertoire de fichiers d'entrée avec le fichier de séquence et un répertoire de sortie dans lequel les données groupées doivent être stockées.

Example

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

Vous obtiendrez les données groupées générées dans le répertoire de sortie donné.

Clustering K-means

Le clustering K-means est un algorithme de clustering important. L'algorithme de clustering k en k-means représente le nombre de clusters dans lesquels les données doivent être divisées. Par exemple, la valeur k spécifiée pour cet algorithme est sélectionnée comme 3, l'algorithme va diviser les données en 3 clusters.

Chaque objet sera représenté sous forme de vecteur dans l'espace. Initialement, k points seront choisis par l'algorithme de manière aléatoire et traités comme des centres, chaque objet le plus proche de chaque centre est regroupé. Il existe plusieurs algorithmes pour la mesure de distance et l'utilisateur doit choisir celui requis.

Creating Vector Files

  • Contrairement à l'algorithme Canopy, l'algorithme k-means nécessite des fichiers vectoriels en entrée, vous devez donc créer des fichiers vectoriels.

  • Pour générer des fichiers vectoriels à partir du format de fichier de séquence, Mahout fournit le seq2parse utilitaire.

Voici quelques-unes des options de seq2parseutilitaire. Créez des fichiers vectoriels à l'aide de ces options.

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

Après avoir créé des vecteurs, continuez avec l'algorithme k-means. La syntaxe pour exécuter le travail k-means est la suivante:

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>

Le travail de clustering K-means nécessite un répertoire de vecteurs d'entrée, un répertoire de clusters de sortie, une mesure de distance, le nombre maximum d'itérations à effectuer et une valeur entière représentant le nombre de clusters dans lesquels les données d'entrée doivent être divisées.

Qu'est-ce que la classification?

La classification est une technique d'apprentissage automatique qui utilise des données connues pour déterminer comment les nouvelles données doivent être classées dans un ensemble de catégories existantes. Par exemple,

  • L'application iTunes utilise la classification pour préparer des listes de lecture.

  • Les fournisseurs de services de messagerie tels que Yahoo! et Gmail utilisent cette technique pour décider si un nouveau courrier doit être classé comme spam. L'algorithme de catégorisation s'entraîne en analysant les habitudes des utilisateurs de marquer certains mails comme des spams. Sur cette base, le classificateur décide si un futur courrier doit être déposé dans votre boîte de réception ou dans le dossier des spams.

Comment fonctionne la classification

Lors de la classification d'un ensemble donné de données, le système de classification effectue les actions suivantes:

  • Au départ, un nouveau modèle de données est préparé à l'aide de l'un des algorithmes d'apprentissage.
  • Ensuite, le modèle de données préparé est testé.
  • Par la suite, ce modèle de données est utilisé pour évaluer les nouvelles données et pour déterminer leur classe.

Applications de la classification

  • Credit card fraud detection- Le mécanisme de classification est utilisé pour prédire les fraudes à la carte de crédit. En utilisant les informations historiques des fraudes précédentes, le classificateur peut prédire quelles transactions futures pourraient se transformer en fraudes.

  • Spam e-mails - En fonction des caractéristiques des spams précédents, le classificateur détermine si un e-mail nouvellement rencontré doit être envoyé dans le dossier spam.

Classificateur Naive Bayes

Mahout utilise l'algorithme de classification Naive Bayes. Il utilise deux implémentations:

  • Classification Naive Bayes distribuée
  • Classification Naive Bayes complémentaire

Naive Bayes est une technique simple pour construire des classificateurs. Ce n'est pas un algorithme unique pour entraîner de tels classificateurs, mais une famille d'algorithmes. Un classificateur Bayes construit des modèles pour classer les instances de problème. Ces classifications sont faites à partir des données disponibles.

Un avantage de Bayes naïf est qu'il ne nécessite qu'une petite quantité de données d'entraînement pour estimer les paramètres nécessaires à la classification.

Pour certains types de modèles de probabilité, les classificateurs de Bayes naïfs peuvent être entraînés très efficacement dans un environnement d'apprentissage supervisé.

Malgré ses hypothèses simplifiées à l'extrême, les classificateurs Bayes naïfs ont plutôt bien fonctionné dans de nombreuses situations complexes du monde réel.

Procédure de classification

Les étapes suivantes doivent être suivies pour mettre en œuvre la classification:

  • Générer des exemples de données
  • Créer des fichiers de séquence à partir de données
  • Convertir les fichiers de séquence en vecteurs
  • Former les vecteurs
  • Tester les vecteurs

Étape 1: générer des exemples de données

Générez ou téléchargez les données à classer. Par exemple, vous pouvez obtenir le20 newsgroups exemple de données à partir du lien suivant: http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz

Créez un répertoire pour stocker les données d'entrée. Téléchargez l'exemple comme indiqué ci-dessous.

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

Étape 2: créer des fichiers de séquence

Créez un fichier de séquence à partir de l'exemple en utilisant seqdirectoryutilitaire. La syntaxe pour générer la séquence est donnée ci-dessous:

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

Étape 3: Convertissez les fichiers de séquence en vecteurs

Créez des fichiers vectoriels à partir de fichiers de séquence en utilisant seq2parseutilitaire. Les options deseq2parse l'utilité sont données ci-dessous:

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

Étape 4: Former les vecteurs

Entraînez les vecteurs générés à l'aide du trainnbutilitaire. Les options à utilisertrainnb l'utilité sont données ci-dessous:

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

Étape 5: Testez les vecteurs

Testez les vecteurs en utilisant testnbutilitaire. Les options à utilisertestnb l'utilité sont données ci-dessous:

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