Aprimorando as features usadas na classificação

Machine Learning para dados de séries temporais em Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

O envelope auditivo

  • Suavize os dados para calcular o envelope auditivo
  • Relacionado à quantidade total de energia do áudio em cada instante

Machine Learning para dados de séries temporais em Python

Suavização ao longo do tempo

  • Em vez de tirar a média de todo o tempo, faça uma média local
  • Isso se chama suavização da sua série temporal
  • Remove ruído de curto prazo e mantém o padrão geral
Machine Learning para dados de séries temporais em Python

Suavizando seus dados

Machine Learning para dados de séries temporais em Python

Calculando uma estatística de janela deslizante

# Audio é um DataFrame do Pandas
print(audio.shape)  
# (n_times, n_audio_files)
(5000, 20)  
# Suavize os dados com a média móvel em uma janela de 50 amostras
window_size = 50
windowed = audio.rolling(window=window_size)
audio_smooth = windowed.mean()
Machine Learning para dados de séries temporais em Python

Calculando o envelope auditivo

  • Primeiro retifique o áudio e depois suavize

      audio_rectified = audio.apply(np.abs)
      audio_envelope = audio_rectified.rolling(50).mean()
    
Machine Learning para dados de séries temporais em Python

Machine Learning para dados de séries temporais em Python

Machine Learning para dados de séries temporais em Python

Machine Learning para dados de séries temporais em Python

Engenharia de features do envelope

# Calcule várias features do envelope, uma por som
envelope_mean = np.mean(audio_envelope, axis=0)
envelope_std = np.std(audio_envelope, axis=0)
envelope_max = np.max(audio_envelope, axis=0)

# Crie nossos dados de treino para um classificador
X = np.column_stack([envelope_mean, envelope_std, envelope_max])
Machine Learning para dados de séries temporais em Python

Preparando as features para scikit-learn

X = np.column_stack([envelope_mean, envelope_std, envelope_max])
y = labels.reshape(-1, 1)
Machine Learning para dados de séries temporais em Python

Validação cruzada para classificação

  • cross_val_score automatiza:
    • Dividir dados em treino/validação
    • Ajustar o modelo nos dados de treino
    • Avaliar nos dados de validação
    • Repetir o processo
Machine Learning para dados de séries temporais em Python

Usando 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 para dados de séries temporais em Python

Features auditivas: o Tempograma

  • Podemos resumir informações temporais complexas com funções específicas para séries temporais
  • librosa é ótima para engenharia de features auditivas e de séries temporais
  • Aqui vamos calcular o tempograma, que estima o tempo (tempo/tempo musical) ao longo do som
  • Podemos calcular estatísticas-resumo do tempo como fazemos para o envelope
Machine Learning para dados de séries temporais em Python

Calculando o tempograma

# Importe librosa e calcule o tempo de um array 1-D de áudio
import librosa as lr
audio_tempo = lr.beat.tempo(y=audio, sr=sfreq, 
                            hop_length=2**6)
Machine Learning para dados de séries temporais em Python

Vamos praticar!

Machine Learning para dados de séries temporais em Python

Preparing Video For Download...