Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
LogisticRegression : premier classificateur
C'est le moment d'entrainer ton premier modele de ML. La regression logistique est le choix classique pour commencer : rapide, interpretable, et souvent un bon point de depart (baseline). Malgre son nom trompeur, c'est bien un modele de classification qui predit la probabilite d'appartenir a une classe.
Elle est rapide, interpretable, et souvent un bon point de depart (baseline). En pratique, tu l'entraines avec .fit(X_train, y_train) et tu predis avec .predict(X_test).
from sklearn.linear_model import LogisticRegression model = LogisticRegression(random_state=42) model.fit(X_train, y_train) predictions = model.predict(X_test) probas = model.predict_proba(X_test) # probabilites par classe
Écris une fonction entrainer_logistic(X_train, y_train, X_test) qui entraine une LogisticRegression et renvoie un dictionnaire avec : 'predictions' : les predictions sur X_test (array) 'probabilites' : les probabilites predites sur X_test (array 2D) 'classes' : la liste des classes du modèle
Utilise random_state=42 et max_iter=1000 pour eviter les warnings de convergence.
Tests (4/4)
Predictions correctes
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=5, random_state=42)
result = entrainer_logistic(X[:150], y[:150], X[150:])
assert len(result['predictions']) == 50
assert set(result['predictions']).issubset({0, 1})
Probabilites sommant a 1
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, n_features=3, random_state=42)
result = entrainer_logistic(X[:80], y[:80], X[80:])
for row in result['probabilites']:
assert abs(sum(row) - 1.0) < 1e-6
Classes presentes
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, random_state=42)
result = entrainer_logistic(X[:80], y[:80], X[80:])
assert 0 in result['classes'] and 1 in result['classes']
Forme des probabilites
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, random_state=42)
result = entrainer_logistic(X[:80], y[:80], X[80:])
assert result['probabilites'].shape == (20, 2)
Indices (3 disponibles)
Solution officielle
import numpy as np
from sklearn.linear_model import LogisticRegression
def entrainer_logistic(X_train, y_train, X_test):
model = LogisticRegression(random_state=42, max_iter=1000)
model.fit(X_train, y_train)
return {
'predictions': model.predict(X_test),
'probabilites': model.predict_proba(X_test),
'classes': list(model.classes_),
}