Покращення ознак для класифікації

Machine Learning для часових рядів у Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Аудиторна огинаюча

  • Згладьте дані, щоб обчислити аудиторну огинаючу
  • Вона відбиває загальну енергію звуку в кожний момент часу

Machine Learning для часових рядів у Python

Згладжування у часі

  • Замість середнього за весь час, зробіть локальне усереднення
  • Це називається згладжуванням часових рядів
  • Воно прибирає короткочасний шум і зберігає загальний шаблон
Machine Learning для часових рядів у Python

Згладжування даних

Machine Learning для часових рядів у Python

Обчислення ролінгової статистики

# 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()
Machine Learning для часових рядів у Python

Обчислення аудиторної огинаючої

  • Спершу прямувати (rectify) аудіо, потім згладити

      audio_rectified = audio.apply(np.abs)
      audio_envelope = audio_rectified.rolling(50).mean()
    
Machine Learning для часових рядів у Python

Machine Learning для часових рядів у Python

Machine Learning для часових рядів у Python

Machine Learning для часових рядів у Python

Інжиніринг ознак огинаючої

# 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])
Machine Learning для часових рядів у Python

Підготовка ознак для scikit-learn

X = np.column_stack([envelope_mean, envelope_std, envelope_max])
y = labels.reshape(-1, 1)
Machine Learning для часових рядів у Python

Крос-валідація для класифікації

  • cross_val_score автоматизує:
    • Розбиття на тренувальну й валідаційну вибірки
    • Навчання моделі на тренувальних даних
    • Оцінювання на валідаційних даних
    • Повторення процесу
Machine Learning для часових рядів у Python

Використання 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 для часових рядів у Python

Аудиторні ознаки: темпограма

  • Складнішу часову інформацію підсумовують спеціальними функціями
  • librosa — чудова бібліотека для ознак аудіо й часових рядів
  • Тут обчислимо темпограму — оцінку темпу звуку в часі
  • Статистики темпу рахуємо так само, як і для огинаючої
Machine Learning для часових рядів у Python

Обчислення темпограми

# 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)
Machine Learning для часових рядів у Python

Давайте потренуємось!

Machine Learning для часових рядів у Python

Preparing Video For Download...