Перейти к основному содержимому

Генерация признаков

Нелинейное расширение линейных методов

Линейные модели просты и работают быстро, но способны моделировать только линейные зависимости. Но можно ли их приспособить для моделирования нелинейных зависимостей в данных?

Это можно сделать, добавляя в вектор признаков нелинейные преобразования исходных признаков, и оценивая ту же линейную модель.

Пример для линейной регрессии

Рассмотрим регрессионную задачу прогнозирования y(x)y(x), где xRx\in\mathbb{R}. Если эта задача решается линейной регрессией, то мы можем моделировать только линейные зависимости вида    

y^(x)=w0+w1x\hat{y}(x)=w_0+w_1 x

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

xϕ(x)=[x,x1,x2,...xD]x \to \phi(x)=\left[x,x^1,x^2,...x^D\right]

Тогда линейная регрессия будет аппроксимировать уже нелинейные полиномиальные зависимости вида

y^(x)=w0+w1x1+w2x2++wDxD\hat{y}(x)=w_0+w_1 x^1+w_2 x^2+\cdots+w_D x^D

Пример для линейной классификации

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

x=[x1,x2,xD]\mathbf{x}=\left[x^1,x^2,\cdots x^D\right]

Это вызвано тем, что граница линейного классификатора представляет собой линейную гиперплоскость в пространстве признаков.

Однако мы легко сможем разделить классы в преобразованном пространстве

xϕ(x)=x,\mathbf{x}\to \phi(\mathbf{x})=\|\mathbf{x}\|,

поскольку в новом пространстве данные уже будут линейно разделяться простым классификатором

y^={+1,xR1,x>R\hat{y}=\begin{cases} +1, & \|\mathbf{x}\|\le R \\ -1, & \|\mathbf{x}\|>R \end{cases}

Новое пространство признаков ϕ(x)\phi(\mathbf{x}), в которое мы перешли для лучшей аппроксимации наших данных, будем называть спрямляющим пространством.

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

Правильно подобранные преобразования признаков (feature engineering) способны существенно повысить качество решения задач машинного обучения, причём улучшения можно достигнуть и для исходно нелинейных методов прогнозирования, таких как градиентный бустинг и нейронные сети.

Перечислим основные принципы подбора признаков:

  • Смысловая релевантность.

    Желательно (но не обязательно), чтобы признаки обладали интерпретируемостью и имели логическую связь с задачей.

    Пример: для задачи прогнозирования продаж квартир полезно учитывать не только их стоимость и площадь, но и отношение этих признаков, имеющее смысл цены за квадратный метр.

  • Различимость классов / объясняемость.

    Хороший признак должен быть связан с целевой переменной, обладая высокой корреляцией или мерой взаимной информации с целевой переменной.

  • Минимизация избыточности.

    Сильно скоррелированные признаки не добавлять новой информации, а лишь увеличивать размерность данных без пользы. Существуют специальные методы отбора признаков (feature selection). Для снижения числа признаков также используются методы снижения размерности, такие как метод главных компонент, а для уменьшения влияния каждого признака на модель - регуляризация.

  • Устойчивость к шуму.

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

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

  • Масштабируемость и простота.

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

Детальнее о преобразованиях признаков можно прочитать в [1] и [2].

Литература

  1. GeeksForGeeks: What is Feature Engineering?
  2. Wikipedia: feature engineering.