agritech-api / features /preprocessing.py
github-actions
Deploy API from GitHub Actions
2477a46
Raw
History Blame Contribute Delete
2.88 kB
"""Module de prétraitement des données pour les modèles de machine learning.
Ce module contient des fonctions pour identifier les types de features (numériques et catégorielles)
et pour construire des préprocesseurs adaptés aux différents types de modèles (linéaires, basés sur les arbres, boosting)."""
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
def get_feature_types(X: pd.DataFrame):
"""
Identifie les colonnes numériques et catégorielles.
args:
X : pd.DataFrame
returns:
numeric_features : list
categorical_features : list
"""
numeric_features = X.select_dtypes(include=["int64", "float64"]).columns.tolist()
categorical_features = X.select_dtypes(include=["object", "category"]).columns.tolist()
return numeric_features, categorical_features
def build_linear_preprocessor(X: pd.DataFrame):
"""
Preprocessing pour modèles linéaires.
Numériques :
StandardScaler
Catégorielles :
OneHotEncoder
args:
X : pd.DataFrame
returns:
preprocessor : ColumnTransformer
"""
numeric_features, categorical_features = get_feature_types(X)
preprocessor = ColumnTransformer(
transformers=[
("num", StandardScaler(), numeric_features),
("cat", OneHotEncoder(handle_unknown="ignore", sparse_output=False), categorical_features),
],
remainder="drop",
)
return preprocessor
def build_tree_preprocessor(X: pd.DataFrame):
"""
Preprocessing pour modèles basés sur les arbres.
Numériques :
Pas de transformation
Catégorielles :
OneHotEncoder
args:
X : pd.DataFrame
returns:
preprocessor : ColumnTransformer
"""
numeric_features, categorical_features = get_feature_types(X)
preprocessor = ColumnTransformer(
transformers=[
("num", "passthrough", numeric_features),
("cat", OneHotEncoder(handle_unknown="ignore", sparse_output=False), categorical_features),
],
remainder="drop",
)
return preprocessor
def build_preprocessor(X: pd.DataFrame, model_type: str):
"""
Construit un préprocesseur adapté au type de modèle.
args:
X : pd.DataFrame
model_type : str, parmi 'linear', 'tree', 'boosting'
returns:
preprocessor : ColumnTransformer
"""
if model_type == "linear":
return build_linear_preprocessor(X)
elif model_type in ["tree", "boosting"]:
return build_tree_preprocessor(X)
else:
raise ValueError(
"model_type doit être parmi : 'linear', 'tree', 'boosting'"
)
def get_categorical_features(X):
return X.select_dtypes(include=["object", "category"]).columns.tolist()