Menu
CoddyTech

Plusieurs classes

Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 19 sur 58.

Citron, citron vert ou orange ? La régression logistique gère aussi trois classes. Voici un nouveau fruit qui se situe entre les citrons et les oranges :

À gauche : 45 fruits représentés selon leur diamètre et leur poids, les citrons verts sont petits, les citrons sont au milieu, les oranges sont grandes, et une étoile noire représente un nouveau fruit entre les citrons et les oranges. À droite : ses probabilités sous forme de barres, citron 0.61, citron vert 0.00, orange 0.39

model = LogisticRegression(max_iter=1000)
model.fit(X, kind)  # X : diamètre, poids ; kind : citron, citron vert ou orange
print(model.classes_)
print(np.round(model.predict_proba([[6.7, 144]]), 2))
print(model.predict([[6.7, 144]]))

Cela affiche :

['lemon' 'lime' 'orange']
[[0.61 0.   0.39]]
['lemon']

Chaque ligne contient une probabilité par classe, dans l’ordre de classes_, et leur somme vaut 1. predict choisit la plus élevée.

Le modèle indique donc son degré de certitude : 61 % pour le citron, c’est serré et mérite un second examen.

challenge icon

Défi

Moyen

Une application de podcasts classe les nouveaux épisodes dans les catégories comédie, actualités ou crime réel. Le modèle de départ ajuste une LogisticRegression sur episodes.csv (durée, nombre d’intervenants, rires par minute) et lit un nouvel épisode dans episode, une table à une ligne.

Complète describe(episode) :

  1. Affiche la probabilité de chaque type d’émission, dans l’ordre de model.classes_, en pourcentage entier.
  2. Renvoie le type le plus probable.

Pour l’épisode d’une autre application :

comedy: 12%
news: 70%
true crime: 18%
Best guess: news

Essayez vous-même

import pandas as pd
from sklearn.linear_model import LogisticRegression

episodes = pd.read_csv("episodes.csv")
features = ["length_min", "speakers", "laughs_per_min"]
model = LogisticRegression(max_iter=1000)
model.fit(episodes[features], episodes["show_type"])


# Affiche la probabilité de chaque type d’émission pour un épisode (un tableau à une ligne), puis renvoie le type le plus probable
def describe(episode):
    # Écrivez votre code ici
    return "unknown"


# Ne modifiez pas les lignes ci-dessous : un nouvel épisode, issu de la saisie
length = float(input())
speakers = int(input())
laughs = float(input())
episode = pd.DataFrame({"length_min": [length], "speakers": [speakers], "laughs_per_min": [laughs]})
best = describe(episode)
print(f"Best guess: {best}")
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne