Introduction aux systèmes de recommandation
Les systèmes de recommandation sont des outils d'intelligence artificielle qui analysent les comportements des utilisateurs pour fournir des suggestions personnailsées. Le filtrage collaboratif est une approche populaire qui exploite les similarités entre utilisateurs ou articles pour générer des recommandations. Dans cet article, nous implémenterons un tel système en utilisant Java et la bibliothèque Apache Mahout.
Filtrage collaboratif : principes de base
Le filtrage collaboratif se divise en deux catégories principales : le filtrage basé sur les utilisateurs, qui recommande des articles appréciés par des utilisateurs similaires, et le filtrage basé sur les articles, qui suggère des éléments similaires à ceux déjà appréciés. Nous nous concentrerons ici sur le filtrage basé sur les articles pour prédire les évaluations de films.
Configuration de l'environnement
Assurez-vous d'avoir installé Java 8 ou une version ultérieure. Créez un projet Maven et ajoutez la dépendanec suivante dans votre fichier pom.xml pour inclure Apache Mahout :
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-core</artifactId>
<version>14.1</version>
</dependency>
Préparation des données
Nous utiliserons un jeu de données d'évaluations de films au format CSV. Le fichier evaluations_films.csv contient des entrées telles que utilisateur_id,film_id,score, où les scores représentent les notes données par les utilisateurs.
Implémentation du système de recommandation
Chargement des données
Chargeons les données d'évaluation en utilisant la classe FileDataModel de Mahout. Voici un exemple de code avec des noms de variables modifiés :
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.model.DataModel;
import java.io.File;
import java.io.IOException;
public class MoteurRecommandation {
public static void main(String[] args) {
try {
File sourceDonnees = new File("evaluations_films.csv");
DataModel modeleUtilisateur = new FileDataModel(sourceDonnees);
System.out.println("Données chargées avec succès.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Création du moteur de recommandation
Nous calculerons la similarité entre les articles en utilisant la mesure de similarité de Tanimoto, puis construirons un moteur de recommandation basé sur les articles :
import org.apache.mahout.cf.taste.impl.similarity.TanimotoCoefficientSimilarity;
import org.apache.mahout.cf.taste.impl.recommender.GenericItemBasedRecommender;
import org.apache.mahout.cf.taste.impl.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.model.DataModel;
import java.util.List;
public class MoteurRecommandation {
public static void main(String[] args) throws Exception {
File sourceDonnees = new File("evaluations_films.csv");
DataModel modeleUtilisateur = new FileDataModel(sourceDonnees);
TanimotoCoefficientSimilarity mesureSimilarite = new TanimotoCoefficientSimilarity(modeleUtilisateur);
GenericItemBasedRecommender generateurRecommandations = new GenericItemBasedRecommender(modeleUtilisateur, mesureSimilarite);
List<RecommendedItem> suggestions = generateurRecommandations.recommend(1, 5);
for (RecommendedItem suggestion : suggestions) {
System.out.println("Film suggéré ID: " + suggestion.getItemID() + ", Score prédit: " + suggestion.getValue());
}
}
}
Visualisation des résultats
Pour afficher les scores de recommandation de manière visuelle, nous utiliserons JFreeChart avec un graphique circulaire. Ajoutez la dépendance JFreeChart à votre projet et exécutez le code suivant :
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
import javax.swing.*;
public class VisualisationRecommandations {
public static void main(String[] args) {
DefaultPieDataset jeuDonnees = new DefaultPieDataset();
jeuDonnees.setValue("Film 5", 4.1);
JFreeChart diagramme = ChartFactory.createPieChart(
"Scores de recommandation",
jeuDonnees,
true,
true,
false
);
JFrame cadre = new JFrame();
cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cadre.getContentPane().add(new ChartPanel(diagramme));
cadre.pack();
cadre.setVisible(true);
}
}
Exécutez ce programme pour afficher une fenêtre affichant le score prédit pour le film recommandé.