Exercices Machine Learning RandomForest et importance des features
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

RandomForest et importance des features

Le Random Forest est souvent le premier modele qu'on teste sur des donnees tabulaires, et pour cause : il marche tres bien out-of-the-box. L'idee est simple mais puissante : au lieu de faire confiance a un seul arbre (qui peut etre instable), on en entraine des centaines et on les fait voter.

Chaque arbre est entraine sur un sous-ensemble aleatoire des données et des features. La prediction finale est le vote majoritaire de tous les arbres. C'est le principe de l'ensemble learning : combiner plusieurs modèles faibles pour obtenir un modèle fort.

Le Random Forest est souvent le meilleur modèle out-of-the-box pour les données tabulaires.

from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
rf.feature_importances_ # importance moyenne de chaque feature

Écris une fonction random_forest_importance(X_train, y_train, X_test, y_test, feature_names, n_estimators=100) qui entraine un RandomForest et renvoie :
'accuracy' : accuracy sur le test set
'importances' : dictionnaire feature_name -> importance, trie du plus important au moins important

Tests (4/4)

Accuracy raisonnable
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=300, n_features=5, n_informative=3, random_state=42)
names = ['f1', 'f2', 'f3', 'f4', 'f5']
result = random_forest_importance(X[:200], y[:200], X[200:], y[200:], names)
assert result['accuracy'] > 0.5
Importances triees
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=4, random_state=42)
names = ['a', 'b', 'c', 'd']
result = random_forest_importance(X[:150], y[:150], X[150:], y[150:], names)
vals = list(result['importances'].values())
assert vals == sorted(vals, reverse=True)
Toutes les features presentes
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=3, random_state=42)
names = ['x', 'y', 'z']
result = random_forest_importance(X[:150], y[:150], X[150:], y[150:], names)
assert set(result['importances'].keys()) == {'x', 'y', 'z'}
Importances sommant a 1
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=5, random_state=42)
names = ['a', 'b', 'c', 'd', 'e']
result = random_forest_importance(X[:150], y[:150], X[150:], y[150:], names)
assert abs(sum(result['importances'].values()) - 1.0) < 1e-6

Indices (3 disponibles)

solution.py