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

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

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

1. Выбор функции

2. Обработка смешанных переменных

3. Извлечение признаков / создание признаков

4. Расчет: замените отсутствующие значения.

5. Выбросы

6. Разработка редких этикеток

7. Преобразование категориальных столбцов / кодировки функций

8. Масштабирование функций

9. Извлечение даты

10. Преобразование функций

Выбор функции

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

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

Удалите объекты, которые сильно коррелируют друг с другом (мультиколлинеарность).

def correlation(dataset, threshold):
col_corr = set() # Set of all the names of correlated columns
corr_matrix = dataset.corr()
for i in range(len(corr_matrix.columns)):
   for j in range(i):
      if abs(corr_matrix.iloc[i, j]) > threshold: 
      # we are interested in absolute coeff value
         colname = corr_matrix.columns[i]
         # getting the name of column
         col_corr.add(colname)
         return col_corr
#To get list of correlated features and drop them
corr_features = correlation(X_train, 0.7)
X_train.drop(corr_features,axis=1)

Удалите объекты, которые имеют низкую дисперсию (имеют одинаковое значение для большинства / всех наблюдений).

from sklearn.feature_selection import VarianceThreshold
var_thres=VarianceThreshold(threshold=0)
var_thres.fit(data)
# To see remaining columns
data.columns[var_thres.get_support()]
# To see dropped columns
for feature in constant_columns:
   print(feature)

Методы выбора функций

  1. На основе фильтра
  • Корреляция
  • Хи-квадрат
  • Тест ANOVA (дисперсионный анализ)

2. На основе оболочки

  • RFE (исключение рекурсивных функций)
  • Прямой выбор
  • Обратное устранение

3. Встроенный

  • Лассо
  • Хребет

Смешанные переменные

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

Извлечение признаков / создание признаков

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

Вменение: заменить отсутствующие значения

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

  • Ничего не делать

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

Некоторые алгоритмы могут учитывать отсутствующие значения и определять наилучшие значения вменения для отсутствующих данных на основе сокращения потерь при обучении (Ex- XGBoost)

  • Отбросьте столбец

Если процент отсутствующих данных в столбцах очень велик

  • Отбросьте строку

Если процент отсутствующих данных в строке / с очень велик

  • Среднее значение, медиана, условное исчисление режима (отсутствует случайным образом)

Чаще всего применяемая техника. Корреляции между функциями не учитываются. Это работает только на уровне столбца. Он даст плохие результаты для закодированных категориальных функций (НЕ используйте его для категориальных функций). Может вычислять среднее значение, сгруппированное по сильно коррелированному признаку.

  • Расчет произвольным значением, например, 999 (не пропущено случайно)

Он отражает важность отсутствия, если оно есть. Обоснование состоит в том, что если значение отсутствует, то это по какой-то причине.

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

Он отражает важность отсутствия (если таковые имеются).

  • Заполните отсутствующие данные с помощью такого алгоритма, как KNN

Выбросы

  • Выброс - это точка данных, которая значительно отличается от остальных данных.

Обнаружение выбросов

  • Для непрерывных переменных: используйте Boxplot, чтобы проверить наличие выбросов.
  • Для дискретных переменных: рассчитайте процент для каждого значения. Значения менее 1% можно рассматривать как выбросы.
  • Найдите выбросы, используя один из двух методов, перечисленных ниже:
  1. Метод среднего и стандартного отклонения
  • Если распределение является гауссовым, выбросы будут лежать за пределами среднего плюс-минус 3-кратное стандартное отклонение переменной.
uppper_boundary=df[‘Age’].mean() + 3* df[‘Age’].std()
lower_boundary=df[‘Age’].mean() — 3* df[‘Age’].std()
print(lower_boundary), print(uppper_boundary),print(df[‘Age’].mean())

2. Метод IQR.

  • Если переменная не имеет нормального распределения, общий подход заключается в вычислении квантилей, а затем межквантильного диапазона (IQR).
Q1=train[sel_col[i]].quantile(0.25)
Q3= train[sel_col[i]].quantile(0.85)
IQR= Q3-Q1
print(“Lower Bound”, Q1–1.5 * IQR)
print(“Upper Bound”, Q1 + 1.5 * IQR)
  • Изучите наличие выбросов в данных, чтобы увидеть, есть ли какая-либо зависимость выбросов от других переменных.
  • Некоторые алгоритмы, такие как Adaboost, очень чувствительны к выбросам. В то время как дерево решений игнорирует наличие выбросов.

Методы

  • Ограничение или верхнее кодирование

Это метод замены выбросов верхними граничными значениями. Используйте его для дискретных переменных со значениями менее 1%.

  • Дискретность, также известная как биннинг

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

  • Расчет среднего / среднего / режима

Как показано выше в разделе вменения

  • Отбросить выбросы

Отбросьте строки, только если набор данных огромен.

Редкие этикетки

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

Случаи и методы

  • Одна преобладающая категория (95–99%) (низкая дисперсия)

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

  • Небольшое количество категорий (менее 5)

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

  • Высокая мощность

Замените редкую метку самой частой меткой. Редкие этикетки можно сгруппировать в отдельную категорию под названием «Редкие».

Кодирование функций

Методы

  1. Номинальный
  • Одно горячее кодирование

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

  • Одно горячее кодирование для многозначных переменных

Выполните редкую разработку этикеток, а затем закодируйте функцию.

  • Среднее кодирование

Замените метку на цель для этой метки.

  • Кодирование количества / частоты

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

2. Порядковый

  • Кодировка ярлыка

Замените метку каким-нибудь порядковым номером, если она имеет смысл.

  • Целевая порядковая кодировка (склонна к переобучению)

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

  • Сортировка этикеток в соответствии с целью

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

  • Замена ярлыков фактором риска / средним кодированием

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

  • Кодирование отношения вероятности

Для каждой метки мы вычисляем среднее значение цели = 1, то есть вероятность быть 1 (P (1)), а также вероятность цели = 0 (P (0)), которая рассчитывается как (1- значит). Затем мы вычисляем соотношение P (1) / P (0) и заменяем метки этим соотношением.

Масштабирование функций

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

Однако масштабирование функций не требуется для алгоритмов, не основанных на расстоянии. Например: Дерево решений, Случайный лес.

Методы

  1. Нормализация или масштабирование минимум-максимум (от 0 до 1)
  • Преобразованная переменная находится в диапазоне от 0 до 1.
  • Очень чувствителен к выбросам
Z = (X — Xmin) / (Xmax — Xmin)

2. Стандартизация (наиболее часто используется)

  • Процедура включает вычитание среднего значения каждого наблюдения и последующее деление на стандартное отклонение.
Z = (X — µ) / (std deviation)

Преобразование функции

Преобразование Гаусса - это преобразование пространственного объекта в распределение Гаусса / Нормальное. Это требуется только для алгоритмов линейной регрессии и логистической регрессии.

  1. Визуализируйте распределение данных
  • Гистограмма
  • График Q-Q

2. Методы (для преобразования переменной в распределение Гаусса)

  • Логарифмическое преобразование
  • Взаимное преобразование
  • Преобразование квадратного корня
  • Экспоненциальное преобразование (в более общем смысле вы можете использовать любой показатель степени)
  • Трансформация Boxcox
  • Дискретизацию / биннинг можно использовать для исправления как выбросов, так и искаженного распределения данных.

Гауссово распределение

Свойства распределения Гаусса:

  • Унимодальный: один режим
  • Симметричный: левая и правая половины - зеркальное отображение
  • Колоколообразный: максимальная высота (мода) в среднем
  • Среднее значение, мода и медиана расположены в центре.

ЗАКЛЮЧЕНИЕ

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

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