Aller au contenu principal

Guide : Extraction des Features

Cette étape est le cœur de l'approche "hybride" (physique + ML) du pipeline. Au lieu de donner le spectre brut à un modèle, nous extrayons des informations physiquement pertinentes : la présence et la position des principales raies spectrales.

Ce processus est géré par les classes PeakDetector et FeatureEngineer.

Étape 1 : Détection des Pics (Raies)

Le module PeakDetector est chargé d'identifier les minima locaux significatifs dans le spectre normalisé, qui correspondent à des raies d'absorption.

  1. Inversion du Flux : Les raies d'absorption sont des "creux". Pour les trouver avec un algorithme de détection de pics, on inverse le flux (-flux). Les creux deviennent des pics.
  2. Détection avec SciPy : La fonction scipy.signal.find_peaks est utilisée pour localiser tous les pics qui dépassent un certain seuil de proéminence. Ce paramètre est crucial pour ne garder que les raies significatives et ignorer le bruit.
  3. Matching avec les Raies Connues : La liste des pics détectés est ensuite comparée à un dictionnaire de raies astrophysiques cibles (Hα, Hβ, CaII K&H). Pour chaque raie cible, le script cherche s'il existe un pic détecté à proximité (dans une fenêtre de tolérance, par ex. ±30 Å).

Le résultat est un dictionnaire qui, pour chaque raie cible, indique la longueur d'onde exacte du pic trouvé, ou None si aucun pic correspondant n'a été trouvé.

Exemple de sortie du PeakDetector
matched_lines = {
"Hα": 6565.2,
"Hβ": None,
"CaII K": 3932.8,
"CaII H": 3969.1
}
Interprétation

Dans cet exemple, le spectre présente bien des raies Hα et Calcium, mais pas de raie Hβ détectable (peut-être une étoile de type tardif ou un spectre bruité dans le bleu).

Étape 2 : Construction du Vecteur de Features

Le dictionnaire de raies est informatif, mais pas directement utilisable par un modèle de Machine Learning. Le module FeatureEngineer le transforme en un vecteur numérique simple. Logique Actuelle (v0.1.0) : Présence/Absence

Détails sur les Features Binaires

Pour chaque raie cible (Hα, Hβ, CaII K, CaII H), on crée une feature binaire :

  • 1 si un pic a été trouvé (la valeur dans le dictionnaire n'est pas None).
  • 0 si la raie est absente.

Pour l'exemple ci-dessus, le vecteur de features final serait : [1, 0, 1, 1]. Ce vecteur simple capture la "signature" de base du spectre, qui est déjà très discriminante pour séparer les types spectraux.

src/pipeline/feature_engineering.py - Simplifié
def extract_features(self, matched_lines):
# self.lines = ["Hα", "Hβ", "CaII K", "CaII H"]
features = []
for line_name in self.lines:
if matched_lines.get(line_name) is not None:
features.append(1)
else:
features.append(0)
return features

Pistes d'Amélioration Futures

Ceci est la version la plus simple de l'extraction de features. La Roadmap prévoit des améliorations majeures : Extraire plus de raies (He II, G-band, TiO...). Mesurer les propriétés physiques de chaque raie (FWHM, profondeur, largeur équivalente) pour créer des features beaucoup plus riches. Calculer des ratios entre l'intensité de différentes raies.