Улучшение признаков для классификации

Машинное обучение для данных временных рядов на Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Огибающая звука

  • Сглаживаем данные для вычисления огибающей звука
  • Отражает суммарную энергию аудиосигнала в каждый момент времени

Машинное обучение для данных временных рядов на Python

Сглаживание по времени

  • Вместо усреднения по всему времени можно использовать локальное усреднение
  • Этот приём называется сглаживанием временного ряда
  • Оно устраняет кратковременные шумы, сохраняя общую закономерность
Машинное обучение для данных временных рядов на Python

Сглаживание данных

Машинное обучение для данных временных рядов на 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()
Машинное обучение для данных временных рядов на Python

Вычисление огибающей звука

  • Сначала выпрямите сигнал, затем сгладьте его

      audio_rectified = audio.apply(np.abs)
      audio_envelope = audio_rectified.rolling(50).mean()
    
Машинное обучение для данных временных рядов на Python

Машинное обучение для данных временных рядов на Python

Машинное обучение для данных временных рядов на Python

Машинное обучение для данных временных рядов на 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])
Машинное обучение для данных временных рядов на Python

Подготовка признаков для scikit-learn

X = np.column_stack([envelope_mean, envelope_std, envelope_max])
y = labels.reshape(-1, 1)
Машинное обучение для данных временных рядов на Python

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

  • cross_val_score автоматизирует процесс:
    • Разбиения данных на обучающую и валидационную выборки
    • Обучения модели на обучающей выборке
    • Оценки на валидационной выборке
    • Повторения этого процесса
Машинное обучение для данных временных рядов на 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]
Машинное обучение для данных временных рядов на Python

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

  • Для сложной временно́й информации применяют специальные функции для временных рядов
  • librosa — отличная библиотека для работы со звуком и конструирования признаков временных рядов
  • Здесь мы вычислим темпограмму — оценку темпа звука во времени
  • Сводные статистики темпа рассчитываются так же, как и для огибающей
Машинное обучение для данных временных рядов на 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)
Машинное обучение для данных временных рядов на Python

Давайте потренируемся!

Машинное обучение для данных временных рядов на Python

Preparing Video For Download...