Poprawa cech używanych do klasyfikacji

Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Obwiednia dźwięku

  • Wygładź dane, aby obliczyć obwiednię dźwięku
  • Związana z całkowitą energią dźwięku w każdej chwili czasu

Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Wygładzanie w czasie

  • Zamiast uśredniać po całym czasie, można wykonać lokalne uśrednianie
  • Nazywa się to wygładzaniem szeregu czasowego
  • Usuwa krótkoterminowy szum, zachowując ogólny wzorzec
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Wygładzanie danych

Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Obliczanie statystyki okna kroczącego

# Audio is a Pandas DataFrame
print(audio.shape)  
# (n_times, n_audio_files)
(5000, 20)  
# Smooth our data by taking the rolling mean in a window of 50 samples
window_size = 50
windowed = audio.rolling(window=window_size)
audio_smooth = windowed.mean()
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Obliczanie obwiedni dźwięku

  • Najpierw wyprostuj sygnał audio, następnie go wygładź

      audio_rectified = audio.apply(np.abs)
      audio_envelope = audio_rectified.rolling(50).mean()
    
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Inżynieria cech obwiedni

# Calculate several features of the envelope, one per sound
envelope_mean = np.mean(audio_envelope, axis=0)
envelope_std = np.std(audio_envelope, axis=0)
envelope_max = np.max(audio_envelope, axis=0)

# Create our training data for a classifier
X = np.column_stack([envelope_mean, envelope_std, envelope_max])
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Przygotowanie cech dla scikit-learn

X = np.column_stack([envelope_mean, envelope_std, envelope_max])
y = labels.reshape(-1, 1)
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Walidacja krzyżowa w klasyfikacji

  • cross_val_score automatyzuje:
    • Podział danych na zbiory treningowe i walidacyjne
    • Dopasowanie modelu do danych treningowych
    • Ocenę na danych walidacyjnych
    • Powtarzanie tego procesu
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Użycie 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]
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Cechy audio: Tempogram

  • Złożone informacje czasowe można podsumować funkcjami specyficznymi dla szeregów czasowych
  • librosa to świetna biblioteka do inżynierii cech audio i szeregów czasowych
  • Obliczymy tempogram, który szacuje tempo dźwięku w czasie
  • Statystyki podsumowujące tempa oblicza się tak samo jak dla obwiedni
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Obliczanie tempogramu

# Import librosa and calculate the tempo of a 1-D sound array
import librosa as lr
audio_tempo = lr.beat.tempo(y=audio, sr=sfreq, 
                            hop_length=2**6)
Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Czas na ćwiczenia!

Uczenie maszynowe dla danych szeregów czasowych w Pythonie

Preparing Video For Download...