83 lines
5.4 KiB
Markdown
83 lines
5.4 KiB
Markdown
---
|
|
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$. При этом расстояния между всеми парами векторов-категорий одинаковы.
|
|
|
|
## Связанные заметки
|
|
|
|
- [[Нейронные сети]]
|
|
- [[Обратное распространение ошибки]]
|
|
- [[Нейронная сеть Кохонена]]
|