Förbättra särdragen för klassificering

Maskininlärning för tidsseriedata i Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Det auditiva envelopet

  • Jämna ut data för att beräkna det auditiva envelopet
  • Relaterat till den totala mängden ljudenergi vid varje tidpunkt

Maskininlärning för tidsseriedata i Python

Utjämning över tid

  • Istället för att medelvärdesberäkna över all tid kan vi göra ett lokalt medelvärde
  • Det kallas att jämna ut din tidsserie
  • Det tar bort kortsiktigt brus och behåller det övergripande mönstret
Maskininlärning för tidsseriedata i Python

Jämna ut dina data

Maskininlärning för tidsseriedata i Python

Beräkna ett rullande fönster

# 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()
Maskininlärning för tidsseriedata i Python

Beräkna det auditiva envelopet

  • Först likriktár du ljudet, sedan jämnar du ut det

      audio_rectified = audio.apply(np.abs)
      audio_envelope = audio_rectified.rolling(50).mean()
    
Maskininlärning för tidsseriedata i Python

Maskininlärning för tidsseriedata i Python

Maskininlärning för tidsseriedata i Python

Maskininlärning för tidsseriedata i Python

Särdragsteknik för envelopet

# 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])
Maskininlärning för tidsseriedata i Python

Förbered särdragen för scikit-learn

X = np.column_stack([envelope_mean, envelope_std, envelope_max])
y = labels.reshape(-1, 1)
Maskininlärning för tidsseriedata i Python

Korsvalidering för klassificering

  • cross_val_score automatiserar processen att:
    • Dela upp data i tränings- och valideringsset
    • Anpassa modellen på träningsdata
    • Poängsätta den på valideringsdata
    • Upprepa processen
Maskininlärning för tidsseriedata i Python

Använda 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]
Maskininlärning för tidsseriedata i Python

Auditiva särdrag: tempogrammet

  • Vi kan sammanfatta komplex temporal information med tidsseriespecifika funktioner
  • librosa är ett utmärkt bibliotek för auditiv särdragsteknik och tidsserier
  • Här beräknar vi tempogrammet, som skattar tempot i ett ljud över tid
  • Vi kan beräkna sammanfattande statistik för tempot på samma sätt som för envelopet
Maskininlärning för tidsseriedata i Python

Beräkna tempogrammet

# 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)
Maskininlärning för tidsseriedata i Python

Nu kör vi en övning!

Maskininlärning för tidsseriedata i Python

Preparing Video For Download...