Реальные данные часто невозможно разделить. Это большая проблема, которую нужно решать. Таким образом, линейные модели, такие как логистическая регрессия, машинные классификаторы опорных векторов и линейная регрессия, не достигают требуемой цели. Иногда даже сложные модели, такие как Random Forest, XGBoost Classifiers, Neural Networks, не дают эффективных результатов, если данные не разделимы.

Есть ли способ преобразовать наши данные так, чтобы они были частично или полностью разделены?

Ответ - ДА, с помощью Feature Engineering.

Функциональная инженерия

«Разработка функций - это процесс преобразования необработанных данных в функции, которые лучше представляют основную проблему для прогнозных моделей , что приводит к повышению точности модели для невидимых данных ».

- Доктор Джейсон Браунли

Проще говоря, Feature Engineering - это процесс создания (или преобразования) новых функций из существующих, чтобы модели машинного обучения / глубокого обучения работали лучше.

«В конце концов, некоторые проекты машинного обучения успешны, а некоторые - нет. В чем разница? Несомненно, наиболее важным фактором являются используемые функции ».

- Профессор Педро Домингос

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

Разработка функций на примере игрушки

Допустим, у нас есть данные с двумя функциями и целевой класс с двумя метками, 0 - отрицательный, а 1 - положительный.

Цель: Задача классификации - построить плоскость (линию), разделяющую положительные и отрицательные классы.

Теперь вопрос в том, можем ли мы эффективно построить плоскость (линию), четко разделяющую эти два класса?

К сожалению нет.

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

Есть ли альтернатива? Можем ли мы преобразовать данные, чтобы облегчить выполнение этой задачи? Можем ли мы применить какое-либо преобразование (любое математическое), чтобы их можно было разделить? Подумай об этом!

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

Что, если мы возьмем эти две характеристики в квадрат?

Посмотрим, как они выглядят в квадрате.

Бинго !!!

При возведении объектов в квадрат (с самими собой) большие значения Feature 1 и Feature 2 дали гораздо большие значения, а меньшие значения дали гораздо меньшие значения.

В таблице ниже показаны значения до и после преобразования.

+-----------+-----------+-----------+-----------+
|   feat_1  |   feat_2  |  feat_1sq |  feat_2sq |
+-----------+-----------+-----------+-----------+
| -0.814954 |  4.933138 |  0.66415  |  24.33585 |
|  1.418311 | -4.794621 |  2.011606 | 22.988394 |
|  3.234597 |  3.812792 | 10.462615 | 14.537385 |
|  4.984155 | -0.397743 | 24.841801 |  0.158199 |
+-----------+-----------+-----------+-----------+

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

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

ПРИМЕЧАНИЕ: Как узнать эти преобразования? Когда применять конкретное преобразование?

Ответ: это возможно только при наличии знаний в предметной области / экспертизы в предметной области.

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

Полученные результаты

Давайте создадим два классификатора логистической регрессии, где «C» будет гиперпараметром, а ROC AUC - метрикой оценки исходных данных и данных, созданных с помощью функций. Диапазон значений ROC AUC от 0 до 1. Чем выше ROC, тем лучше модель и наоборот.

Мы можем ясно видеть, что данные, разработанные для функции, дали ROC AUC как 1, указывает, что все положительные точки данных правильно классифицированы, и даже ни одна отрицательная точка не классифицируется как положительная, то есть 100% точность.

Примечание. Настройка гиперпараметров в этой задаче не повлияла.

Другой пример игрушки

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

Можем ли мы применить какие-либо преобразования к этим данным, чтобы упростить эту задачу?

Да еще раз !!!.

Поскольку объекты точек данных с положительной меткой могут быть как положительными, так и отрицательными, мы создадим новый набор функций:

Feature 1 new = Feature 1 * Feature 2

Feature 2 new = Feature 2

+-----------+-----------+---------------+---------------+
| Feature 1 | Feature 2 | Feature 1 new | Feature 2 new |
+-----------+-----------+---------------+---------------+
|     10    |     10    |      100      |       10      |
|     12    |    -10    |      -120     |      -10      |
|    -10    |     10    |      -100     |       10      |
|    -12    |    -10    |      120      |      -10      |
+-----------+-----------+---------------+---------------+

Новая функция Feature 1 для положительно помеченных точек всегда положительна, а для отрицательно помеченных точек всегда отрицательна, поэтому оба набора точек попадают в разные регионы.

Теперь мы можем легко создать плоскость, которая гораздо проще разделяет эти две функции.

Другие методы проектирования элементов

Есть много техник трансформации. Пусть f1- Feature 1 и f2- Feature 2 являются характеристиками с действительным знаком. Тогда мы можем применить

  1. Полиномиальные преобразования: f1 ** 2, f1 * f2, f1 + f2, 3 * f1 + 2f2 и т. д.,
  2. Тригонометрические преобразования: sin (f1), tanh (f2 ** 2), cot (f1 / f2) и т. д.,
  3. Логические преобразования: AND, OR, NOT, NAND, XOR и т. д.,
  4. Логарифмические преобразования: журнал (f1), журнал (f1 * f2) и т. д.,
  5. Экспоненциальные преобразования: pow (e, f1), pow (e, 2 * f2) и т. д.,

Для текстовых данных обычно используются следующие методы разработки функций:

  1. Мешок слов
  2. Сплошной мешок слов
  3. Term Frequency Inverse Document Frequency (TFIDF)
  4. Метод Word2Vec (W2V)
  5. Среднее значение TFIDF и W2V

Выводы

Существует общее заблуждение, что настройка гиперпараметров всегда может дать лучшие результаты с компромиссом смещения и дисперсии. Это неверно, потому что, если данные не разделимы, построение классификатора поверх данных бесполезно. Единственное, что может спасти вас от решения этой проблемы, - это Разработка функций. Итак, Feature Engineering играет жизненно важную роль в области машинного обучения и глубокого обучения.

Более простые модели, такие как логистическая регрессия с конструированием функций, могут превзойти сложные модели, такие как Random Forest, XGBoostClassifier, нейронные сети без конструирования функций.

Внимание! Создание сложных моделей без понимания данных - самое глупое, что вы можете сделать.

Расширение глубокого обучения

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

  1. Более простые сети
  2. Меньше слоев
  3. Меньше количество эпох и т. Д.,

Ссылка

AppliedAiCourse

Исходный код

Https://github.com/gnana1997/Importance-of-Featurization

Сноска

Я ценю любые отзывы и конструктивную критику. Спасибо за чтение!!

Следуйте за мной, чтобы узнать несколько интересных вещей о машинном обучении.

  1. LinkedIn
  2. GitHub