vault backup: 2026-05-24 15:03:28

This commit is contained in:
Dmitry
2026-05-24 15:03:28 +03:00
parent 6189cfdd1c
commit 7335ca7c23
705 changed files with 18360 additions and 154 deletions
@@ -0,0 +1,82 @@
---
status: seed
type: concept
tags:
- machine-learning
- neural-networks
- preprocessing
- normalization
created: 2026-05-14
updated: 2026-05-14
title: Предобработка данных для нейронных сетей
---
# Предобработка данных для нейронных сетей
Перед обучением [[Нейронные сети|нейронной сети]] данные необходимо привести к виду, пригодному для входных нейронов. "Сырые" данные приводят к неустойчивому обучению и большой ошибке выхода. После правильной предобработки сеть зачастую обучается быстрее и достигает меньшей ошибки.
## Принцип максимизации энтропии
Общий принцип предобработки: **максимизировать энтропию входных и выходных значений**.
Если значения переменной сосредоточены в узком диапазоне, информационное содержание каждого примера мало. Если значения равномерно распределены по единичному интервалу — информация максимальна. Значит, кодирование и нормировка должны стремиться к равномерному распределению закодированных примеров.
## Нормировка числовых переменных
Все входные и выходные значения необходимо привести к единому масштабу — нейросеть не должна зависеть от единиц измерения.
### Линейная нормировка
$$
\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$. При этом расстояния между всеми парами векторов-категорий одинаковы.
## Связанные заметки
- [[Нейронные сети]]
- [[Обратное распространение ошибки]]
- [[Нейронная сеть Кохонена]]