Algorithmes d'apprentissage semi-supervisé

Machine LearningMachine LearningBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons explorer le concept d'apprentissage semi-supervisé, qui est un type d'apprentissage automatique où une partie des données d'entraînement est étiquetée et une partie est non étiquetée. Les algorithmes d'apprentissage semi-supervisé peuvent exploiter les données non étiquetées pour améliorer les performances du modèle et généraliser mieux à de nouvelles échantillons. Cela est particulièrement utile lorsque nous disposons d'un faible nombre de données étiquetées mais d'un grand nombre de données non étiquetées.

Dans ce laboratoire, nous allons nous concentrer sur deux algorithmes d'apprentissage semi-supervisé : l'auto-apprentissage et la propagation d'étiquettes. Nous allons apprendre à implémenter et à utiliser ces algorithmes à l'aide de scikit-learn, une bibliothèque populaire d'apprentissage automatique en Python.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup(["Advanced Data Analysis and Dimensionality Reduction"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/semi_supervised("Semi-Supervised Learning") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-71111{{"Algorithmes d'apprentissage semi-supervisé"}} sklearn/semi_supervised -.-> lab-71111{{"Algorithmes d'apprentissage semi-supervisé"}} ml/sklearn -.-> lab-71111{{"Algorithmes d'apprentissage semi-supervisé"}} end

Installation de scikit-learn

Avant de commencer, vérifions que scikit-learn est installé. Si vous ne l'avez pas installé, vous pouvez l'installer à l'aide de la commande suivante :

pip install -U scikit-learn

Auto-apprentissage

Présentation de l'algorithme d'auto-apprentissage

L'algorithme d'auto-apprentissage est basé sur l'algorithme de Yarowsky. Il permet à un classifieur supervisé de fonctionner comme un classifieur semi-supervisé en apprenant à partir de données non étiquetées. L'algorithme fonctionne en entraînant itérativement le classifieur supervisé sur les données étiquetées et non étiquetées, puis en utilisant les prédictions sur les données non étiquetées pour ajouter un sous-ensemble de ces échantillons aux données étiquetées. L'algorithme continue d'itérer jusqu'à ce que tous les échantillons aient des étiquettes ou qu'aucun nouvel échantillon ne soit sélectionné lors d'une itération.

Utilisation de l'auto-apprentissage dans scikit-learn

Dans scikit-learn, l'algorithme d'auto-apprentissage est implémenté dans la classe SelfTrainingClassifier. Pour utiliser cet algorithme, vous devez fournir un classifieur supervisé qui implémente la méthode predict_proba. Voici un exemple d'utilisation de l'algorithme d'auto-apprentissage :

from sklearn.semi_supervised import SelfTrainingClassifier
from sklearn.linear_model import LogisticRegression

## Créez un classifieur de régression logistique
classifier = LogisticRegression()

## Créez un classifieur d'auto-apprentissage avec le classifieur de régression logistique comme classifieur de base
self_training_classifier = SelfTrainingClassifier(classifier)

## Entraînez le classifieur d'auto-apprentissage sur les données étiquetées et non étiquetées
self_training_classifier.fit(X_labeled, y_labeled, X_unlabeled)

## Prédisez les étiquettes pour de nouveaux échantillons
y_pred = self_training_classifier.predict(X_test)

Dans l'exemple ci-dessus, X_labeled et y_labeled sont les données étiquetées, X_unlabeled sont les données non étiquetées et X_test sont les nouveaux échantillons à prédire.

Propagation d'étiquettes

Présentation de l'algorithme de propagation d'étiquettes

La propagation d'étiquettes est un type d'algorithme d'inférence semi-supervisée sur graphe. Elle construit un graphe de similarité sur tous les éléments du jeu de données d'entrée et utilise ce graphe pour propager les étiquettes des données étiquetées vers les données non étiquetées. La propagation d'étiquettes peut être utilisée pour les tâches de classification et prend en charge les méthodes de noyau pour projeter les données dans des espaces dimensionnels alternatifs.

Utilisation de la propagation d'étiquettes dans scikit-learn

Dans scikit-learn, deux modèles de propagation d'étiquettes sont disponibles : LabelPropagation et LabelSpreading. Les deux modèles construisent un graphe de similarité et propagent les étiquettes. Voici un exemple d'utilisation de la propagation d'étiquettes :

from sklearn.semi_supervised import LabelPropagation

## Créez un modèle de propagation d'étiquettes
label_propagation = LabelPropagation()

## Entraînez le modèle de propagation d'étiquettes sur les données étiquetées
label_propagation.fit(X_labeled, y_labeled)

## Prédisez les étiquettes pour de nouveaux échantillons
y_pred = label_propagation.predict(X_test)

Dans l'exemple ci-dessus, X_labeled et y_labeled sont les données étiquetées, et X_test sont les nouveaux échantillons à prédire.

Récapitulatif

L'apprentissage semi-supervisé est une technique puissante qui nous permet d'exploiter les données non étiquetées pour améliorer les performances de nos modèles. Dans ce laboratoire, nous avons appris à propos de deux algorithmes d'apprentissage semi-supervisé : l'auto-apprentissage et la propagation d'étiquettes. Nous avons également appris à implémenter et à utiliser ces algorithmes à l'aide de scikit-learn. En incorporant les données non étiquetées dans nos flux de travail d'apprentissage automatique, nous pouvons mieux utiliser les données disponibles et obtenir des prédictions plus précises.