De features voor classificatie verbeteren

Machine Learning voor tijdreeksgegevens in Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

De auditieve envelop

  • Maak de data glad om de auditieve envelop te berekenen
  • Geeft de totale hoeveelheid audio-energie op elk moment weer

Machine Learning voor tijdreeksgegevens in Python

Gladstrijken in de tijd

  • In plaats van over alle tijd te middelen, kun je lokaal middelen
  • Dit heet je tijdreeks gladstrijken
  • Het verwijdert kortetermijnruis en behoudt het algemene patroon
Machine Learning voor tijdreeksgegevens in Python

Je data gladstrijken

Machine Learning voor tijdreeksgegevens in Python

Een rolling window-statistiek berekenen

# Audio is a Pandas DataFrame
print(audio.shape)  
# (n_times, n_audio_files)
(5000, 20)  
# Strijk onze data glad met het voortschrijdend gemiddelde over een venster van 50 samples
window_size = 50
windowed = audio.rolling(window=window_size)
audio_smooth = windowed.mean()
Machine Learning voor tijdreeksgegevens in Python

De auditieve envelop berekenen

  • Eerst je audio rectificeren, daarna gladstrijken

      audio_rectified = audio.apply(np.abs)
      audio_envelope = audio_rectified.rolling(50).mean()
    
Machine Learning voor tijdreeksgegevens in Python

Machine Learning voor tijdreeksgegevens in Python

Machine Learning voor tijdreeksgegevens in Python

Machine Learning voor tijdreeksgegevens in Python

Feature engineering van de envelop

# Bereken meerdere kenmerken van de envelop, één per geluid
envelope_mean = np.mean(audio_envelope, axis=0)
envelope_std = np.std(audio_envelope, axis=0)
envelope_max = np.max(audio_envelope, axis=0)

# Maak onze trainingsdata voor een classifier
X = np.column_stack([envelope_mean, envelope_std, envelope_max])
Machine Learning voor tijdreeksgegevens in Python

Onze features voorbereiden voor scikit-learn

X = np.column_stack([envelope_mean, envelope_std, envelope_max])
y = labels.reshape(-1, 1)
Machine Learning voor tijdreeksgegevens in Python

Cross-validatie voor classificatie

  • cross_val_score automatiseert:
    • Data splitsen in training-/validatiesets
    • Het model fitten op trainingsdata
    • Scoren op validatiedata
    • Dit proces herhalen
Machine Learning voor tijdreeksgegevens in Python

`cross_val_score` gebruiken

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 voor tijdreeksgegevens in Python

Auditieve features: de Tempogram

  • Met tijdreeksfuncties kun je complexere temporele info samenvatten
  • librosa is een fijne library voor auditieve en tijdreeks-feature engineering
  • We berekenen hier de tempogram, die het tempo in de tijd schat
  • Samenvattingen van tempo kun je net zo berekenen als voor de envelop
Machine Learning voor tijdreeksgegevens in Python

De tempogram berekenen

# Importeer librosa en bereken het tempo van een 1D-geluidsarray
import librosa as lr
audio_tempo = lr.beat.tempo(y=audio, sr=sfreq, 
                            hop_length=2**6)
Machine Learning voor tijdreeksgegevens in Python

Laten we oefenen!

Machine Learning voor tijdreeksgegevens in Python

Preparing Video For Download...