Files
SecondBrain/90 Library/Machine Learning/Предобработка данных для нейронных сетей.md
T
2026-05-24 15:03:28 +03:00

5.4 KiB

status, type, tags, created, updated, title
status type tags created updated title
seed concept
machine-learning
neural-networks
preprocessing
normalization
2026-05-14 2026-05-14 Предобработка данных для нейронных сетей

Предобработка данных для нейронных сетей

Перед обучением Нейронные сети данные необходимо привести к виду, пригодному для входных нейронов. "Сырые" данные приводят к неустойчивому обучению и большой ошибке выхода. После правильной предобработки сеть зачастую обучается быстрее и достигает меньшей ошибки.

Принцип максимизации энтропии

Общий принцип предобработки: максимизировать энтропию входных и выходных значений.

Если значения переменной сосредоточены в узком диапазоне, информационное содержание каждого примера мало. Если значения равномерно распределены по единичному интервалу — информация максимальна. Значит, кодирование и нормировка должны стремиться к равномерному распределению закодированных примеров.

Нормировка числовых переменных

Все входные и выходные значения необходимо привести к единому масштабу — нейросеть не должна зависеть от единиц измерения.

Линейная нормировка


\tilde{x}_i = \frac{x_i - x_{i,\min}}{x_{i,\max} - x_{i,\min}}

Результат лежит в [0, 1]. Оптимальна, когда значения плотно заполняют некоторый интервал без резких выбросов. При наличии выбросов весь основной массив данных сожмётся в окрестность нуля.

Нормировка по статистике


\tilde{x}_i = \frac{x_i - \bar{x}_i}{\sigma_i}, \quad \bar{x}_i = \frac{1}{P}\sum_{\alpha=1}^{P}x_i^\alpha, \quad \sigma_i^2 = \frac{1}{P-1}\sum_{\alpha=1}^{P}(x_i^\alpha - \bar{x}_i)^2

Нормированные значения не гарантированно лежат в [0, 1]. Если выходные нейроны используют сигмоиду, диапазон выходов ограничен — нужно дополнительно ограничить диапазон нормированных меток. Естественный выход: применить к нормированным данным ту же функцию активации, что и у выходных нейронов:


\tilde{x}_i = f\!\left(\frac{x_i - \bar{x}_i}{\sigma_i}\right), \quad f(a) = \frac{1}{1+e^{-a}}

Кодирование нечисловых переменных

Нейронная сеть работает с числами, поэтому нечисловые переменные необходимо закодировать. Два основных типа:

  • Ординальные — упорядоченные категории, которые можно ранжировать: плохо — хорошо — отлично.
  • Категориальные — неупорядоченные классы: красный, синий, зелёный.

Ординальные переменные

Единичный отрезок [0, 1] разбивается на n частей (по числу классов) пропорционально числу примеров каждого класса в обучающей выборке:


\Delta x_k = \frac{P_k}{P}

где P_k — число примеров класса k, P — общее число примеров. Числовым значением класса становится центр соответствующего отрезка.

Такой способ обеспечивает равномерное распределение закодированных значений, то есть максимальную энтропию.

Категориальные переменные

Навязывать несуществующий порядок нельзя — это искажает структуру данных. Используется двоичное кодирование: n категорий кодируются n бинарными нейронами.

  • первая категория: (1, 0, \dots, 0)
  • вторая категория: (0, 1, \dots, 0)
  • $n$-я категория: (0, \dots, 0, 1)

Можно использовать биполярную кодировку, заменяя нули на -1. При этом расстояния между всеми парами векторов-категорий одинаковы.

Связанные заметки

  • Нейронные сети
  • Обратное распространение ошибки
  • Нейронная сеть Кохонена