Практика машинного обучения Deer-2-Что такое Feature Engineering

машинное обучение

«Сяо Ду» не интересна практика машинного обучения deer-2-Что такое разработка функций

一个小杜logo

первоначальное намерение

Продолжая предыдущую статью, в этой статье будет написано оразработка функцийСодержание

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

«Как выполнить проектирование признаков, как получить высококачественные положительные и отрицательные образцы, как работать с несбалансированными наборами данных и как определить, как оценивать» — это прежде всего

«Какой алгоритм выбрать, как настроить параметры и объяснить модель» — следующее, что нужно сделать.

Так что учитесь фиче-инжинирингу

微信图片_20210317150053

Tags: 机器学习

[Toc]

? Что такое функциональная инженерия

Все мы знаем характеристики, т.е.x1x_1,x2x_2...

Так что же такое фиче-инжиниринг?v2-816803ee0754a5f046e5de180e10ceb5_720w

Разработка функций означает созданиеНеобработанные данныепреобразовать ввектор признаков, Проще говоряНеобработанные данныесопоставить сособенность

23958

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

Необработанные данные особенность
Номер комнаты: 6 num_room = 6
Название улицы: улица ==street_name = 0==

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

Но что делать, если необработанные данные являются категориальными? Например, как преобразовать данные о том, что улица — это улица А?

Что делать, если исходные данные являются категориальными?

Может быть, вы думали об этом методе

Пусть улица A = 0, улица B = 1, улица C = 2.

Можно ли использовать числа в качестве индекса в качестве входного признака модели?

Хорошо, но с ограничениями, давайте вернемся к исходной формуле градиентного спуска.

Repeat{θ0=θ0αθ0j(θ0,θ1)θ1=θ1αθ1j(θ0,θ1)}}\begin{aligned} Repeat\{ \\ \theta_0 &=\theta_0 - \alpha \frac{\partial}{\partial \theta_0} j(\theta_0, \theta_1) \\ \theta_1 &=\theta_1 - \alpha \frac{\partial}{\partial \theta_1} j(\theta_0, \theta_1) \} \\ \} \end{aligned}

Видно, что функция потерь рассчитывается по формулеθ\theta(т.е. веса)

Предположим, что street_name — это функцияx2x_2, и, наконец, вычисляетθ\thetaэтоx2x_2умноженный

Понятно, что без обучения.

Вес улицы А составляетθ×x2=0×θ=0\theta \times x_2 = 0 \times \theta = 0

Вес улицы C составляетθ×x2=2×θ=2θ\theta \times x_2 = 2 \times \theta = 2\theta

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

Возникает следующая проблема

  • Первая проблема: изменен начальный вес улицы
  • Вторая проблема: не учитывать, что street_name может иметь несколько значений(Дом на углу находится и на улице A, и на улице B)

Для двух вышеуказанных задач решения следующие

  • однократное кодирование(one-hot)
Необработанные данные особенность
Номер комнаты: 6 num_room = 6
Название улицы: улица ==street_name = [1, 0, 0]==
Необработанные данные особенность
Номер комнаты: 7 num_room = 7
Название улицы: улица B, улица C ==street_name = [0, 1, 1]==
  • разреженное представление

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

? Какие хорошие характеристики

На более стандартизированном языке это выглядит следующим образом

image-20210318145617087

? Как очистить данные?

В зависимости от типа данных можно попробовать несколько методов:

  • ==Масштабирование собственных значений== (нормализовано):缩小特征值的范围

    Например,результаты теста(0-100) можно преобразовать в стандартный диапазон (0-1)

    • Помогает градиентному спуску сходиться быстрее
    • Помогает избежать ловушек «NaN» (то есть данных слишком много, чтобы превысить лимит памяти)
    • Помогает модели определить соответствующие веса для каждой функции
  • ==Обработка экстремальных выбросов==:把大于设定上限的值都设定为上限值

    Например, значения больше или равные 4 устанавливаются равными 4

  • == Биннинг ==(дискретизация):把一些无关的变量转为分类变量

    НапримерШирота и долгота школыиуспеваемость студентаЭто определенно не линейная зависимость, но она имеет небольшой эффект.

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

  • ==инвентарь==:就是说从数据集中移除不良样本

    • пропущенное значение
    • дубликаты образцов
    • Плохая метка (y)
    • Плохие собственные значения (x)

? Почему вам нужно завершить комбинацию функций?

Сначала сделаем предположение о распределении данных

image-20210318153525733

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

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

Подумайте о часто используемых кривых:

  • Квадратичная функция
  • Логарифмическая функция
  • Экспоненциальная функция

Можно ли преобразовать исходную линейную функцию в квадратичную функцию?

y=θ0x0+θ1x1+by = \theta_0x_0+\theta_1x_1+b

если заказ

x2=x12x_2 = x_1^2

Первоначальная форма становится

y=θ0x0+θ1x2+bкоторыйy=θ0x0+θ1x12+by = \theta_0x_0+\theta_1x_2+b \\ т. е. \\ y = \theta_0x_0+\theta_1x_1^2+b

Не станет ли это квадратичной функцией, планируйте пройти!

Признак С равен признаку А, умноженному на признак А, т. е.Комбинация функций

Комбинация функций就是指通过将两个或多个输入特征相乘来对特征空间中的非线性归类进行编码的合成特征

v2-816803ee0754a5f046e5de180e10ceb5_720w

Мы можем создавать множество различных комбинаций функций

  • C=[A×B] C = [A \times B]
  • C=[A×B×D×E×F] C = [A \times B \times D \times E \times F]
  • C=[A×A] C = [A \times A]
Реальные приложения комбинаций функций

Предположим, у нас есть данные о кликах приложения Taobao, чтобы судить, будут ли пользователи нажимать на рекомендуемые продукты, чтобы оценить рейтинг кликов CTR (Click-Through-Rate).

В этих данных о кликах

Пол(мужской и женский) является характеристикой

возрасттакже особенность

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

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

⛹️‍♀️ Особое сочетание черт

Помните, что мы сказали вышеоднократное кодирование, преобразовать категориальные переменные в формат [1, 0, 0, 0]

Как совместить горячее кодирование?

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

  • страна = [Страна A, Страна B, Страна C, Страна D, Страна E]

  • язык = [1 язык, 2 языка, 3 языка, 4 языка]

до двуходнократное кодированиеОсобенности вектор объединения (Cross)

C=[country×language]C = [country \times language]

Удивительно, что недавно полученный векторный признак C можно интерпретировать.

C = [страна 1 язык, страна 2 языка, ..., страна E 3 языка, страна E 4 языка]


Заканчивать!

?Ссылки


  1. Machine-Learning-Book
  2. Coursera-ML-AndrewNg-Notes