
5 façons de mettre en œuvre la discrétisation variable
Bien que les variables continues dans les ensembles de données du monde réel fournissent des informations détaillées, elles ne constituent pas toujours la forme la plus efficace de modélisation et d’interprétation. C’est là qu’intervient la discrétisation variable.
Comprendre la discrétisation des variables est essentiel pour les étudiants en science des données qui construisent de solides bases de ML et pour les ingénieurs en IA qui conçoivent des systèmes interprétables.
Au début de mon parcours en science des données, je me suis principalement concentré sur le réglage des hyperparamètres, l’expérimentation de différents algorithmes et l’optimisation des mesures de performances.
Lorsque j’ai expérimenté des méthodes de discrétisation variable, j’ai remarqué à quel point certains modèles ML devenaient plus stables et interprétables. J’ai donc décidé d’expliquer ces méthodes dans cet article.
‘est-ce que la discrétisation variable ?
Un peu de travail mieux avec des variables discrètes. Par exemple, si l’on souhaite entraîner un modèle d’arbre de décision sur un jeu de données avec des variables continues, il est préférable de transformer ces variables en variables discrètes pour réduire le temps de formation du modèle.
La discrétisation des variables est le processus de transformation de variables continues en variables discrètes en créant bacsqui sont un ensemble d’intervalles continus.
Avantages de la discrétisation variable
- Les arbres de décision et les modèles bayésiens naïfs fonctionnent mieux avec des variables discrètes.
- Les fonctionnalités discrètes sont faciles à comprendre et à interpréter.
- La discrétisation peut réduire l’impact des variables asymétriques et des valeurs aberrantes dans les données.
En résumé, la discrétisation simplifie les données et permet aux modèles de s’entraîner plus rapidement.
Inconvénients de la discrétisation variable
Le principal inconvénient de la discrétisation variable est la perte d’informations due à la création de bacs. Nous devons trouver le nombre minimum de bacs sans perte significative d’informations. L’algorithme ne parvient pas à trouver ce numéro lui-même. L’utilisateur doit saisir le nombre de compartiments comme hyperparamètre de modèle. Ensuite, l’algorithme trouvera les points de coupure correspondant au nombre de compartiments.
Discrétisation supervisée et non supervisée
Les principales catégories de méthodes de discrétisation sont supervisées et non supervisées. Les méthodes non supervisées déterminent les limites des groupes en utilisant la distribution sous-jacente de la variable, tandis que les méthodes supervisées utilisent des valeurs de vérité terrain pour déterminer ces limites.
Types de discrétisation variable
Nous discuterons des types suivants de discrétisation de variables.
- Discrétisation d’égale largeur
- Discrétisation à fréquence égale
- Discrétisation à intervalles arbitraires
- Discrétisation basée sur le clustering K-means
- Discrétisation basée sur un arbre de décision
Discrétisation d’égale largeur
Comme son nom l’indique, cette méthode crée des bacs de taille égale. La largeur d’un bac est calculée en divisant la plage de valeurs d’une variable, Xpar le nombre de bacs, k.
Largeur = {Max(X) — Min(X)} / k
Ici, k est un hyperparamètre défini par l’utilisateur.
Par exemple, si les valeurs de X compris entre 0 et 50 et k = 5, nous obtenons 10 comme largeur de bac et les bacs sont 0-10, 10-20, 20-30, 30-40 et 40-50. Si k = 2, la largeur des cases est de 25 et les cases sont de 0 à 25 et de 25 à 50. Ainsi, la largeur du bac diffère en fonction de la valeur du k hyperparamètre. La discrétisation de largeur égale attribue un nombre différent de points de données à chaque compartiment. Les largeurs des bacs sont les mêmes.
Implémentons la discrétisation de largeur égale en utilisant l’ensemble de données Iris. strategy='uniform' dans KBinsDiscretizer() crée des bacs de largeur égale.
# Import libraries
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import KBinsDiscretizer
# Load the Iris dataset
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# Select one feature
feature = 'sepal length (cm)'
X = df[[feature]]
# Initialize
equal_width = KBinsDiscretizer(
n_bins=15,
encode='ordinal',
strategy='uniform'
)
bins_equal_width = equal_width.fit_transform(X)
plt.hist(bins_equal_width, bins=15)
plt.title("Equal Width Discretization")
plt.xlabel(feature)
plt.ylabel("Count")
plt.show()

L’histogramme montre des cases de largeur égale.
Discrétisation à fréquence égale
Cette méthode alloue les valeurs de la variable dans les groupes contenant un nombre similaire de points de données. Les largeurs des bacs ne sont pas les mêmes. La largeur du bac est déterminée par des quantiles, qui divisent les données en quatre parties égales. Ici aussi, le nombre de bins est défini par l’utilisateur comme un hyperparamètre.
L’inconvénient majeur de la discrétisation à fréquence égale est qu’il y aura de nombreux compartiments vides ou contenant quelques points de données si la distribution des points de données est asymétrique. Cela entraînera une perte importante d’informations.
Implémentons la discrétisation de largeur égale en utilisant l’ensemble de données Iris. strategy='quantile' dans KBinsDiscretizer() crée des bacs équilibrés. Chaque groupe contient (environ) un nombre égal de points de données.
# Import libraries
import pandas as pd
from sklearn.datasets import load_iris
# Load the Iris dataset
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# Select one feature
feature = 'sepal length (cm)'
X = df[[feature]]
# Initialize
equal_freq = KBinsDiscretizer(
n_bins=3,
encode='ordinal',
strategy='quantile'
)
bins_equl_freq = equal_freq.fit_transform(X)
Discrétisation à intervalles arbitraires
Dans cette méthode, l’utilisateur alloue les points de données d’une variable dans des compartiments de manière à ce que cela ait du sens (arbitraire). Par exemple, vous pouvez attribuer les valeurs de la variable température dans des bacs représentant « froid », « normale » et « chaud ». La priorité est donnée au sens général. Il n’est pas nécessaire d’avoir la même largeur de groupe ou un nombre égal de points de données dans un groupe.
Ici, nous définissons manuellement les limites des groupes en fonction de la connaissance du domaine.
# Import libraries
import pandas as pd
from sklearn.datasets import load_iris
# Load the Iris dataset
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# Select one feature
feature = 'sepal length (cm)'
X = df[[feature]]
# Define custom bins
custom_bins = [4, 5.5, 6.5, 8]
df['arbitrary'] = pd.cut(
df[feature],
bins=custom_bins,
labels=[0,1,2]
)
Discrétisation basée sur le clustering K-means
Le clustering K-means se concentre sur le regroupement de points de données similaires en clusters. Cette fonctionnalité peut être utilisée pour la discrétisation variable. Dans cette méthode, les bacs sont les clusters identifiés par l’algorithme k-means. Ici aussi, il faut définir le nombre de clusters, kcomme hyperparamètre de modèle. Il existe plusieurs méthodes pour déterminer la valeur optimale de k. Lire ce article pour apprendre ces méthodes.
Ici, nous utilisons KMoyennes algorithme pour créer des groupes qui agissent comme des catégories discrétisées.
# Import libraries
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
# Load the Iris dataset
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# Select one feature
feature = 'sepal length (cm)'
X = df[[feature]]
kmeans = KMeans(n_clusters=3, random_state=42)
df['kmeans'] = kmeans.fit_predict(X)
Discrétisation basée sur un arbre de décision
Le processus de discrétisation basé sur un arbre de décision utilise des arbres de décision pour trouver les limites des compartiments. Contrairement à d’autres méthodes, celle-ci trouve automatiquement le nombre optimal de bacs. Ainsi, l’utilisateur n’a pas besoin de définir le nombre de bacs comme hyperparamètre.
Les méthodes de discrétisation dont nous avons discuté jusqu’à présent sont des méthodes supervisées. Cependant, cette méthode est une méthode non supervisée ce qui signifie que nous utilisons également des valeurs cibles, ouipour déterminer les limites.
# Import libraries
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
# Load the Iris dataset
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# Select one feature
feature = 'sepal length (cm)'
X = df[[feature]]
# Get the target values
y = iris.target
tree = DecisionTreeClassifier(
max_leaf_nodes=3,
random_state=42
)
tree.fit(X, y)
# Get leaf node for each sample
df['decision_tree'] = tree.apply(X)
tree = DecisionTreeClassifier(
max_leaf_nodes=3,
random_state=42
)
tree.fit(X, y)
Ceci est un aperçu des méthodes de discrétisation variable. La mise en œuvre de chaque méthode sera discutée dans des articles séparés.
C’est la fin de l’article d’aujourd’hui.
S’il vous plaît laissez-moi savoir si vous avez des questions ou des commentaires.
Que diriez-vous d’un cours d’IA ?
Rendez-vous dans le prochain article. Bon apprentissage à vous !
Informations sur l’ensemble de données Iris
- Citation: Dua, D. et Graff, C. (2019). Référentiel d’apprentissage automatique UCI [http://archive.ics.uci.edu/ml]. Irvine, Californie : Université de Californie, École d’information et d’informatique.
- Source: https://archive.ics.uci.edu/ml/datasets/iris
- Licence: RA Fisher détient les droits d’auteur de cet ensemble de données. Michael Marshall a fait don de cet ensemble de données au public sous le Licence de dédicace au domaine public Creative Commons (CC0). Vous pouvez en savoir plus sur les différents types de licences d’ensemble de données ici.
Conçu et rédigé par :
Rukshan Pramoditha
2025-03-04



