Référence de la configuration¶
Une configuration FitRank est un fichier YAML fait de sections. Seules data,
task et models sont obligatoires ; toutes les autres clés ont une valeur
par défaut. Une clé inconnue est une erreur qui liste les clés permises : une
faute de frappe ne passe jamais inaperçue.
project: # optionnel : noms, dossiers, reproductibilité
data: # obligatoire : le fichier, la cible, les variables
task: # obligatoire : classification ou regression
preprocessing: # optionnel : quoi faire à quelles colonnes
reduction: # optionnel : réductions de dimension à essayer
models: # obligatoire : les modèles à comparer
evaluation: # optionnel : découpage, plis, recherche, métriques
output: # optionnel : ce qui est enregistré
fitrank validate config.yaml vérifie un fichier sans rien entraîner. La
configuration telle que FitRank l'a lue, valeurs par défaut comprises, est
enregistrée dans chaque dossier de résultats sous le nom config.yaml.
project¶
| Clé | Type | Défaut | Description |
|---|---|---|---|
name |
texte | fitrank |
Nomme le dossier de résultats : runs/<name>_<date>_<heure>/. |
output_dir |
chemin | runs |
Où les dossiers de résultats sont créés. |
random_state |
nombre entier | 42 |
Le même nombre donne le même découpage, les mêmes plis et les mêmes résultats. |
n_jobs |
nombre entier | 1 |
Cœurs du processeur pour la recherche ; -1 les utilise tous. 0 et les valeurs inférieures à -1 sont refusés. |
allowed_modules |
liste de noms de modules | [] |
Paquets que models[].class peut importer, en plus de sklearn. |
project:
name: titanic
random_state: 42
n_jobs: -1
n_jobs: -1 donne les mêmes résultats, plus vite sur les grosses recherches
(l'exemple Titanic passe de 26 s à 15 s sur 12 cœurs). Sur de petits jeux de
données, lancer les processus coûte plus que ce qu'ils font gagner : gardez
1. Un modèle qui fixe n_jobs dans ses params alors que project.n_jobs
ne vaut pas 1 est refusé : les cœurs ne sont jamais utilisés deux fois.
data¶
| Clé | Type | Défaut | Description |
|---|---|---|---|
path |
chemin | obligatoire | Un fichier .csv, .xlsx ou .parquet. Un chemin relatif part du dossier où la commande est lancée. |
target |
nom de colonne | obligatoire | La colonne à prédire. |
features |
all ou liste de colonnes |
all |
Les colonnes d'entraînement. all veut dire toutes les colonnes sauf la cible. |
exclude |
liste de colonnes | [] |
Avec features: all, les colonnes à laisser de côté (identifiants, texte libre...). |
data:
path: data/titanic.csv
target: Survived
features: all
exclude: [PassengerId, Name, Ticket]
Utilisez soit une liste de features, soit exclude, pas les deux. Une
colonne qui n'existe pas est signalée avec les colonnes disponibles et le nom
le plus proche. Les lignes dont la cible manque sont signalées, jamais
supprimées.
task¶
classification (prédire une catégorie : survivant ou non, une espèce...) ou
regression (prédire un nombre : un prix, une durée...). C'est vous qui
décidez : FitRank avertit seulement, sans s'arrêter, quand la cible ne
ressemble pas à la tâche, par exemple une régression sur une cible à deux
valeurs. Vous hésitez ? Voir Classification ou régression ?
preprocessing¶
Un ensemble de groupes. Chaque groupe applique ses steps, dans l'ordre, à ses
columns. Les colonnes hors de tout groupe passent sans changement.
preprocessing:
numeric: # n'importe quel nom de groupe
columns: [Age, Fare]
steps:
- imputer: {strategy: median}
- scaler: standard
categorical:
columns: [Sex, Embarked]
steps:
- imputer: most_frequent
- encoder: onehot
| Étape | S'écrit | Ce qu'elle fait |
|---|---|---|
imputer |
imputer (mean), imputer: median, imputer: {strategy: constant, fill_value: 0} |
Remplit les valeurs manquantes. Stratégies : mean, median, most_frequent, constant. Les autres clés sont des options de SimpleImputer. |
scaler |
scaler (standard), scaler: minmax, scaler: robust |
Met les nombres à la même échelle. |
encoder |
encoder (onehot), encoder: ordinal |
Transforme les catégories en nombres. onehot ignore les catégories jamais vues à l'entraînement ; ordinal les code -1. |
Règles :
- Une colonne n'appartient qu'à un seul groupe, et une étape n'apparaît qu'une fois par groupe.
- Une colonne avec des valeurs manquantes demande un
imputer, une colonne texte unencoder: sinonfitrank validateles liste, avec un extrait de YAML. - Les étapes sont apprises dans chaque pli de validation croisée, sur les lignes d'entraînement seulement : les scores ne sont pas gonflés par une fuite de données.
reduction¶
Une liste de réductions de dimension ; chacune est combinée avec chaque
modèle. Défaut : [none].
reduction:
- none # les colonnes telles quelles
- pca: {n_components: [3, 5]} # les valeurs entre [] sont cherchées, comme params
| Nom | Grille par défaut | Ce qu'elle fait |
|---|---|---|
none |
— | Garde les colonnes telles quelles. |
pca |
{n_components: [0.95]} |
Projette les colonnes sur moins d'axes (0.95 = garder 95 % de la variance). |
select_k_best |
{k: [5, 10]} |
Garde les k colonnes les plus liées à la cible. |
variance_threshold |
{threshold: [0.0, 0.01]} |
Retire les colonnes qui varient à peine. |
polynomial_features |
{degree: [2]} |
Ajoute les produits et les puissances des colonnes. |
Les options écrites après le nom remplacent la grille par défaut. Avec 2 réductions et 4 modèles, FitRank évalue 8 candidats.
models¶
Une liste d'au moins un modèle. Chaque modèle a un name ou une class, et
des params optionnels.
models:
- name: logistic_regression # grille par défaut
- name: random_forest
params: {n_estimators: [100, 300], max_depth: [null, 10]}
- class: sklearn.ensemble.ExtraTreesClassifier
params: {n_estimators: [100]}
| Clé | Type | Description |
|---|---|---|
name |
nom de modèle | Un modèle FitRank : voir Modèles. |
class |
chemin de classe | N'importe quel estimateur scikit-learn, par exemple sklearn.svm.LinearSVC. |
params |
ensemble de listes | Les valeurs à essayer pour chaque paramètre. Remplace la grille par défaut ; null correspond au None de Python. |
Sans params, un modèle nommé cherche dans sa petite grille par défaut, et une
classe utilise ses paramètres par défaut. Un paramètre que le modèle n'a pas
est refusé, avec le nom valide le plus proche.
evaluation¶
| Clé | Type | Défaut | Description |
|---|---|---|---|
test_size |
nombre entre 0 et 1 | 0.2 |
Part des lignes mises de côté pour le score de test final. |
cv |
nombre entier ≥ 2 | 5 |
Nombre de plis de validation croisée sur les autres lignes. |
search |
grid ou random |
grid |
grid essaie chaque combinaison de params ; random en essaie n_iter. |
n_iter |
nombre entier ≥ 1 | 20 |
Avec search: random, combinaisons essayées par candidat (au plus la taille de la grille). |
primary_metric |
nom de scorer | f1_weighted / neg_root_mean_squared_error |
Classe les modèles (défaut en classification / en régression). |
metrics |
liste de noms de scorers | voir plus bas | Aussi calculées sur le jeu de test. |
Les métriques sont les
noms de scorers de scikit-learn.
Sans metrics, la classification affiche accuracy, precision_weighted et
recall_weighted ; la régression affiche r2 et neg_mean_absolute_error.
- Les erreurs (noms qui commencent par
neg_) sont affichées positives, et plus bas est meilleur : le classement écritroot_mean_squared_error. - En classification, le découpage et les plis gardent la part de chaque classe.
- Une métrique qui demande une méthode absente du modèle (par exemple
neg_log_loss, qui demandepredict_proba, sursvm) est sautée pour ce modèle, avec une note.
Vous hésitez sur la métrique ? Voir Choisir une métrique.
output¶
| Clé | Type | Défaut | Description |
|---|---|---|---|
formats |
liste parmi csv, json, markdown |
les trois | Fichiers du classement écrits dans le dossier de résultats. |
save_best_model |
true ou false | true |
Enregistre best_model.joblib, pour fitrank predict. |
Un exemple complet¶
project:
name: titanic
random_state: 42
n_jobs: -1
data:
path: examples/data/titanic.csv
target: Survived
features: all
exclude: [PassengerId, Name, Ticket, Cabin, HomeDest]
task: classification
preprocessing:
numeric:
columns: [Age, Fare, SibSp, Parch]
steps:
- imputer: {strategy: median}
- scaler: standard
categorical:
columns: [Sex, Pclass, Embarked]
steps:
- imputer: {strategy: most_frequent}
- encoder: onehot
reduction:
- none
- pca: {n_components: [3, 5]}
models:
- name: logistic_regression
params: {C: [0.1, 1, 10]}
- name: random_forest
params: {n_estimators: [100, 300], max_depth: [null, 10]}
- name: svm
params: {C: [1, 10], kernel: [linear, rbf]}
- name: decision_tree
evaluation:
test_size: 0.2
cv: 5
primary_metric: f1_weighted
metrics: [accuracy, precision_weighted, recall_weighted, roc_auc]