Извлечение признаков из сигнала

Классификатор не понимает «волны» — ему нужны числа. Извлечение признаков превращает кусок сигнала в вектор.

Признак (feature) — число, описывающее свойство сигнала (например, мощность альфа-ритма), подаваемое на вход классификатору.

Какие признаки берут

  • Мощность по полосам (δ, θ, α, β, γ) — главный признак для ЭЭГ.
  • Дисперсия и амплитуда сигнала на канале.
  • Отношения полос (α/β) — устойчивее к общему уровню.
  • Для моторного воображения — мощность над левой и правой моторной корой.

Окна

Сигнал режут на короткие окна (например, 1 секунда) и из каждого считают вектор признаков. Чем короче окно — тем быстрее реакция, но грубее оценка частот.

Нормировка

Признаки имеют разный масштаб (мощность альфы — десятки, дисперсия — тысячи). Перед классификацией их нормируют — например, к нулевому среднему и единичному СКО (z-оценка):

$$ z = \frac{x - \mu}{\sigma} $$

Как работает под капотом

Возьмём два окна сигнала, посчитаем дисперсию как признак и нормируем по z-оценке:

import statistics
window_left  = [0.2, -0.1, 0.3, -0.4, 0.5, -0.2]   # над левой корой
window_right = [1.5, -1.8, 2.0, -1.6, 1.9, -2.1]   # над правой корой

f_left  = statistics.pvariance(window_left)
f_right = statistics.pvariance(window_right)
print("Признак слева (дисперсия):", round(f_left, 3))
print("Признак справа:           ", round(f_right, 3))

feats = [f_left, f_right]
mu = statistics.mean(feats)
sd = statistics.pstdev(feats)
z = [round((x - mu) / sd, 2) for x in feats]
print("После нормировки (z):", z)

Вывод:

Признак слева (дисперсия): 0.096
Признак справа:            3.345
После нормировки (z): [-1.0, 1.0]

Дисперсия справа намного выше — значит, активна правая моторная кора (воображается движение левой руки). После нормировки два признака стали сопоставимы по масштабу.

Частые ошибки

  • Подавать классификатору сырой сигнал — почти всегда хуже, чем продуманные признаки.
  • Не нормировать признаки разного масштаба — «большой» признак задавит остальные.
  • Считать нормировку на тесте по статистике теста: $\mu, \sigma$ берут из обучающей выборки.

Итог

  • Признаки — числа, описывающие сигнал (мощность полос, дисперсия, отношения).
  • Сигнал режут на окна и из каждого считают вектор признаков.
  • Перед классификацией признаки нормируют (z-оценка).
Проверьте себя
1. Зачем извлекать признаки, а не подавать сырой сигнал?
AТак красивее
BЧисловые признаки описывают нужные свойства и обучают классификатор надёжнее
CСырой сигнал запрещён
DЧтобы сэкономить память всегда
2. Что делает z-нормировка x→(x−μ)/σ?
AУдаляет сигнал
BПриводит признаки к нулевому среднему и единичному СКО
CУсиливает шум
DМеняет частоту
3. Откуда берут μ и σ для нормировки тестовых данных?
AИз теста
BИз обучающей выборки
CИз случайных чисел
DИз нуля