Comment construire un classificateur d’apprentissage automatique en Python avec Scikit-learn

introduction

Machine learning est un domaine de recherche en informatique, en intelligence artificielle et en statistique. L’apprentissage automatique vise à former des algorithmes pour apprendre des modèles et faire des prédictions à partir de données. L’apprentissage automatique est particulièrement utile car il nous permet d’utiliser des ordinateurs pour automatiser les processus de prise de décision.

Vous trouverez des applications d’apprentissage automatique partout. Netflix et Amazon utilisent Machine Learning pour formuler de nouvelles recommandations de produits. Les banques utilisent l’apprentissage automatique pour détecter les activités frauduleuses dans les transactions par carte de crédit et les sociétés de santé commencent à utiliser l’apprentissage automatique pour surveiller, évaluer et diagnostiquer les patients.

Dans ce didacticiel, vous allez implémenter un algorithme d’apprentissage automatique simple en Python à l’aide de Scikit-learn, un outil d’apprentissage automatique de Python. En utilisant une base de données d’informations sur les tumeurs du cancer du sein, vous utiliserez un classificateur Naive Bayes (NB) qui prédit si une tumeur est maligne ou bénigne. .

À la fin de ce didacticiel, vous saurez créer votre propre modèle d’apprentissage automatique en Python.

Conditions préalables

Pour compléter ce tutoriel, vous aurez besoin de:

Étape 1 - Importation de Scikit-learn

Commençons par installer le module Python Scikit-learn, l’une des meilleures bibliothèques d’apprentissage automatique pour Python.

Pour commencer notre projet de codage, activons notre environnement de programmation Python 3. Assurez-vous que vous êtes dans le répertoire où se trouve votre environnement et exécutez la commande suivante:

. /bin/activate

Avec notre environnement de programmation activé, vérifiez si le module Scikit-learn est déjà installé:

python -c "import sklearn"

Si + sklearn + est installé, cette commande se terminera sans erreur. S’il n’est pas installé, vous verrez le message d’erreur suivant:

OutputTraceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'sklearn'

Le message d’erreur indique que + sklearn + n’est pas installé, téléchargez donc la bibliothèque en utilisant + pip +:

pip install scikit-learn[alldeps]

Une fois l’installation terminée, lancez Jupyter Notebook:

jupyter notebook

Dans Jupyter, créez un nouveau bloc-notes Python appelé * ML Tutorial *. Dans la première cellule du carnet, import le module + sklearn +:

Tutoriel ML

import sklearn

Votre ordinateur portable devrait ressembler à la figure suivante:

image: https: //assets.digitalocean.com/articles/python_scikit_ml/2vp91eL.png [Bloc-notes Jupyter avec une cellule Python, qui importe sklearn]

Maintenant que + sklearn + est importé dans notre cahier, nous pouvons commencer à utiliser le jeu de données pour notre modèle d’apprentissage automatique.

Étape 2 - Importation du jeu de données Scikit-learn

L’ensemble de données que nous allons utiliser dans ce didacticiel est la suivante: Bank Cancer du Wisconsin, base de données de diagnostic. L’ensemble de données comprend diverses informations sur les tumeurs du cancer du sein, ainsi que des étiquettes de classification de * malin * ou * bénin *. Le jeu de données contient 569 instances, ou données, sur 569 tumeurs et inclut des informations sur 30 attributs, ou des caractéristiques telles que le rayon de la tumeur, sa texture, son aspect lisse et sa surface.

À l’aide de cet ensemble de données, nous construirons un modèle d’apprentissage automatique afin d’utiliser les informations sur la tumeur pour prédire si une tumeur est maligne ou bénigne.

Scikit-learn est installé avec différents jeux de données que nous pouvons charger dans Python. Le jeu de données souhaité est inclus. Importez et chargez le jeu de données:

Tutoriel ML

...
from sklearn.datasets import load_breast_cancer


# Load dataset
data = load_breast_cancer()

Le + data + variable représente un objet Python qui fonctionne comme un https: //www.digitalocean .com / communauté / tutoriels / Comprendre les dictionnaires en python-3 [dictionnaire]. Les clés de dictionnaire importantes à prendre en compte sont les noms des étiquettes de classification (+ target_names +), les étiquettes réelles (+ target +), les noms d’attribut / caractéristique (+ feature_names +) et les attributs (+ data +).

Les attributs sont une partie essentielle de tout classificateur. Les attributs capturent des caractéristiques importantes sur la nature des données. Étant donné l’étiquette que nous essayons de prédire (tumeur maligne par rapport à une tumeur bénigne), les attributs utiles incluent la taille, le rayon et la texture de la tumeur.

Créez de nouvelles variables pour chaque ensemble d’informations important et affectez les données:

Tutoriel ML

...
# Organize our data
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

Nous avons maintenant lists pour chaque ensemble d’informations. Pour mieux comprendre notre ensemble de données, examinons nos données en imprimant nos étiquettes de classe, l’étiquette de la première instance de données, nos noms d’entités et les valeurs d’entité de la première instance de données:

Tutoriel ML

...
# Look at our data
print(label_names)
print(labels[0])
print(feature_names[0])
print(features[0])

Vous verrez les résultats suivants si vous exécutez le code:

image: https: //assets.digitalocean.com/articles/python_scikit_ml/ezmZX0c.png [Carnet de notes Jupyter avec trois cellules Python, qui affiche la première instance de notre jeu de données]

Comme le montre l’image, nos noms de classe sont * malin * et * bénin *, qui sont ensuite mappés aux valeurs binaires de + 0 + et de '+ 1 + , où + 0 + représente des tumeurs malignes et +1 + `représente les tumeurs bénignes. Par conséquent, notre première instance de données est une tumeur maligne dont le rayon moyen est égal à + 1,79900000e + 01 + `.

Maintenant que nos données sont chargées, nous pouvons les utiliser pour créer notre classificateur d’apprentissage automatique.

Étape 3 - Organiser les données en ensembles

Pour évaluer les performances d’un classificateur, vous devez toujours tester le modèle sur des données invisibles. Par conséquent, avant de créer un modèle, divisez vos données en deux parties: un set de formation et un set de test.

Vous utilisez l’ensemble de formation pour former et évaluer le modèle au cours de la phase de développement. Vous utilisez ensuite le modèle formé pour effectuer des prédictions sur l’ensemble de tests invisible. Cette approche vous donne une idée de la performance et de la robustesse du modèle.

Heureusement, + sklearn + a une fonction appelée + train_test_split () +, qui divise vos données en ces ensembles. Importez la fonction puis utilisez-la pour fractionner les données:

Tutoriel ML

...
from sklearn.model_selection import train_test_split


# Split our data
train, test, train_labels, test_labels = train_test_split(features,
                                                         labels,
                                                         test_size=0.33,
                                                         random_state=42)

La fonction divise les données de manière aléatoire en utilisant le paramètre + test_size +. Dans cet exemple, nous avons maintenant un ensemble de tests (+ test +) qui représente 33% de l’ensemble de données d’origine. Les données restantes (+ train +) constituent alors les données d’apprentissage. Nous avons également les étiquettes respectives pour les variables train / test, c.-à-d. + train_labels + et + test_labels +.

Nous pouvons maintenant passer à la formation de notre premier modèle.

Étape 4 - Construction et évaluation du modèle

Il existe de nombreux modèles d’apprentissage automatique, et chaque modèle a ses forces et ses faiblesses. Dans ce tutoriel, nous allons nous concentrer sur un algorithme simple qui fonctionne généralement bien dans les tâches de classification binaires, à savoir Naive Bayes (NB).

Commencez par importer le module + GaussianNB +. Puis initialisez le modèle avec la fonction + GaussianNB () +, puis entraînez-le en l’ajustant aux données en utilisant + gnb.fit () +:

Tutoriel ML

...
from sklearn.naive_bayes import GaussianNB


# Initialize our classifier
gnb = GaussianNB()

# Train our classifier
model = gnb.fit(train, train_labels)

Après avoir formé le modèle, nous pouvons utiliser le modèle formé pour effectuer des prédictions sur notre ensemble de tests, ce que nous faisons à l’aide de la fonction + Predict () +. La fonction + Predict () + renvoie un tableau de prédictions pour chaque instance de données du jeu de tests. Nous pouvons ensuite imprimer nos prévisions pour avoir une idée de ce que le modèle a déterminé.

Utilisez la fonction + predict () + avec le set + test et affichez les résultats:

Tutoriel ML

...
# Make predictions
preds = gnb.predict(test)
print(preds)

Exécutez le code et vous verrez les résultats suivants:

image: https: //assets.digitalocean.com/articles/python_scikit_ml/pFeJvNA.png [Bloc-notes Jupyter avec cellule Python qui imprime les valeurs prédites du classifieur Naive Bayes sur nos données de test]

Comme vous le voyez dans la sortie du Jupyter Notebook, la fonction ` Predict () + ’a renvoyé un tableau de + 0 + s et + 1 + `s qui représentent nos valeurs prédites pour la classe de tumeur bénin).

Maintenant que nous avons nos prévisions, évaluons les performances de notre classificateur.

Étape 5 - Évaluation de la précision du modèle

En utilisant le tableau de véritables étiquettes de classe, nous pouvons évaluer la précision des valeurs prédites de notre modèle en comparant les deux tableaux (+ test_labels + vs + preds +). Nous allons utiliser la fonction + sklearn + `` + precision_score () + `pour déterminer la précision de notre classificateur d’apprentissage automatique.

Tutoriel ML

...
from sklearn.metrics import accuracy_score


# Evaluate accuracy
print(accuracy_score(test_labels, preds))

Vous verrez les résultats suivants:

image: https: //assets.digitalocean.com/articles/python_scikit_ml/wsLAaEE.png [Bloc-notes Alt Jupyter avec cellule Python qui imprime la précision de notre classificateur NB]

Comme vous le voyez dans la sortie, le classificateur NB est précis à 94,15%. Cela signifie que le classifieur est capable de prédire correctement si la tumeur est maligne ou bénigne dans 94,15% du temps. Ces résultats suggèrent que notre ensemble de 30 attributs est un bon indicateur de la classe de tumeur.

Vous avez construit avec succès votre premier classificateur d’apprentissage automatique. Organisons le code en plaçant toutes les instructions + import en haut du bloc-notes ou du script. La version finale du code devrait ressembler à ceci:

Tutoriel ML

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score


# Load dataset
data = load_breast_cancer()

# Organize our data
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

# Look at our data
print(label_names)
print('Class label = ', labels[0])
print(feature_names)
print(features[0])

# Split our data
train, test, train_labels, test_labels = train_test_split(features,
                                                         labels,
                                                         test_size=0.33,
                                                         random_state=42)

# Initialize our classifier
gnb = GaussianNB()

# Train our classifier
model = gnb.fit(train, train_labels)

# Make predictions
preds = gnb.predict(test)
print(preds)

# Evaluate accuracy
print(accuracy_score(test_labels, preds))

Vous pouvez maintenant continuer à utiliser votre code pour voir si vous pouvez améliorer encore les performances de votre classificateur. Vous pouvez expérimenter différents sous-ensembles de fonctionnalités ou même essayer des algorithmes complètement différents. Visitez le site Scikit-learn pour plus d’idées d’apprentissage automatique.

Conclusion

Dans ce tutoriel, vous avez appris à créer un classificateur d’apprentissage automatique en Python. Vous pouvez maintenant charger des données, organiser des données, former, prévoir et évaluer des classificateurs d’apprentissage automatique en Python à l’aide de Scikit-learn. Les étapes de ce didacticiel devraient vous aider à faciliter le processus de travail avec vos propres données en Python.

Related