Améliorer les caractéristiques pour la classification

Machine Learning pour les données chronologiques en Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

L'enveloppe auditive

  • Lisser les données pour calculer l'enveloppe auditive
  • Liée à la quantité totale d'énergie audio présente à chaque instant

Machine Learning pour les données chronologiques en Python

Lisser dans le temps

  • Au lieu de moyenner sur tout le temps, on peut faire une moyenne locale
  • C'est le lissage d'une série chronologique
  • Il retire le bruit à court terme tout en conservant la tendance générale
Machine Learning pour les données chronologiques en Python

Lisser vos données

Machine Learning pour les données chronologiques en Python

Calculer une statistique à fenêtre glissante

# Audio est un DataFrame Pandas
print(audio.shape)  
# (n_times, n_audio_files)
(5000, 20)  
# Lisser les données avec la moyenne glissante sur une fenêtre de 50 échantillons
window_size = 50
windowed = audio.rolling(window=window_size)
audio_smooth = windowed.mean()
Machine Learning pour les données chronologiques en Python

Calculer l'enveloppe auditive

  • D'abord rectifier l'audio, puis le lisser

      audio_rectified = audio.apply(np.abs)
      audio_envelope = audio_rectified.rolling(50).mean()
    
Machine Learning pour les données chronologiques en Python

Machine Learning pour les données chronologiques en Python

Machine Learning pour les données chronologiques en Python

Machine Learning pour les données chronologiques en Python

Ingénierie de caractéristiques sur l'enveloppe

# Calculer plusieurs caractéristiques de l'enveloppe, une par son
envelope_mean = np.mean(audio_envelope, axis=0)
envelope_std = np.std(audio_envelope, axis=0)
envelope_max = np.max(audio_envelope, axis=0)

# Créer les données d'entraînement pour un classifieur
X = np.column_stack([envelope_mean, envelope_std, envelope_max])
Machine Learning pour les données chronologiques en Python

Préparer les caractéristiques pour scikit-learn

X = np.column_stack([envelope_mean, envelope_std, envelope_max])
y = labels.reshape(-1, 1)
Machine Learning pour les données chronologiques en Python

Validation croisée pour la classification

  • cross_val_score automatise :
    • la division des données en ensembles d'entraînement/validation
    • l'ajustement du modèle sur l'entraînement
    • l'évaluation sur la validation
    • la répétition du processus
Machine Learning pour les données chronologiques en Python

Utiliser cross_val_score

from sklearn.model_selection import cross_val_score

model = LinearSVC()
scores = cross_val_score(model, X, y, cv=3) 
print(scores)
[0.60911642 0.59975305 0.61404035]
Machine Learning pour les données chronologiques en Python

Caractéristiques auditives : le tempogramme

  • On peut résumer des informations temporelles plus complexes avec des fonctions propres aux séries chronologiques
  • librosa est une excellente bibliothèque pour l'ingénierie de caractéristiques audio et de séries chronologiques
  • Ici, nous calculerons le tempogramme, qui estime le tempo d'un son dans le temps
  • On peut en tirer des statistiques sommaires du tempo comme pour l'enveloppe
Machine Learning pour les données chronologiques en Python

Calculer le tempogramme

# Importer librosa et calculer le tempo d'un tableau audio 1-D
import librosa as lr
audio_tempo = lr.beat.tempo(y=audio, sr=sfreq, 
                            hop_length=2**6)
Machine Learning pour les données chronologiques en Python

Passons à la pratique !

Machine Learning pour les données chronologiques en Python

Preparing Video For Download...