Hello,
L’un des problèmes lorsque l’on débute en machine learning est le choix de l’algorithme (ou modèle) à utiliser. Je viens de tomber sur un article du blog de Kaggle où l’auteur partage son approche des différents problèmes à résoudre en ML. J’ai noté deux parties qui m’ont éclairé un peu plus sur le choix des modèles et des hyperparamètres à régler.
Choix d’un modèle
Il y a deux grandes familles d’algorithmes : ceux qui permettent de réaliser une prédiction (à l’aide d’une régression) et ceux qui identifie une variable parmi d’autres (la classification). Les modèles les plus courants pour réaliser ses tâches sont donc :
Classification | Regression |
---|---|
Random Forest | Random Forest |
GBM | GBM |
Logistic Regression | Linear Regression |
Naive Bayes | Ridge |
Support Vector Machines | Lasso |
k-Nearest Neighbors | SVR |
Choix des hyperparamètres
Les hyperparamètres sont ces variables qui permettent d’affiner le fonctionnement d’un modèle de machine learning. Jusqu’à présent, j’utilisais des valeurs trouvées dans un livre ou sur des sites internet, sans trop savoir qu’est ce que je pouvais utiliser, jusqu’à quelle valeur je pouvais aller.
Bref, j’y allais à tâtons au “pif-o-mètre”. Mais l’auteur partage également un tableau récapitulatif de ces différents hyperparamètres et les plages de valeurs les plus prometteuses.
Je le reprend ici :
Modèle | Hyperparamètre | Plage de données |
---|---|---|
Régression linéaire | fit_intercept | True / False |
Régression linéaire | normalize | True / False |
Ridge | alpha | 0.01, 0.1, 1.0, 10, 100 |
Ridge | fit_intercept | True / False |
Ridge | normalize | True / False |
K-neighbors | N_neighbors | 2, 4, 8, 16… |
K-neighbors | p | 2,3 |
SVM | C | 0.001, 0.01…10…100…1000 |
SVM | gamma | Auto ou Random Search |
SVM | class_weight | Balanced, None |
Régression logistique | Penalty | L1 ou I2 |
Régression logistique | C | 0.001, 0.01…10…100 |
Naive Bayes | aucun | aucun |
Lasso | alpha | 0.1, 1.0, 10 |
Lasso | normalize | True / False |
Random Forest | n_estimators | 120, 300, 500, 800, 1200 |
Random Forest | max_depth | 5, 8, 15, 25, 30, None |
Random Forest | min_samples_split | 1, 2, 5, 10, 15, 100 |
Random Forest | min_samples_leaf | 1, 2, 5, 10 |
Random Forest | max_features | Log2, sqrt, None |
Xgboost | eta | 0.01, 0.015, 0.025, 0.05, 0.1 |
Xgboost | gamma | 0.05-0.1, 0.3, 0.5, 0.7, 0.9, 1.0 |
Xgboost | max_depth | 3, 5, 7, 9, 12, 15, 17, 25 |
Xgboost | min_child_weight | 1, 3, 5, 7 |
Xgboost | subsample | 0.6, 0.7, 0.8, 0.9, 1.0 |
Xgboost | colsample_bytree | 0.6, 0.7, 0.8, 0.9, 1.0 |
Xgboost | lambda | 0.01-0.1, 1.0, Random Search |
Xgboost | alpha | 0, 0.1, 0.5, 1.0, Random Search |
J’espère que ces petits récapitulatifs vous seront autant utiles qu’à moi ;-)
A bientôt !