Лучше ли кодировать функции, такие как месяц и час, как фактор или число в модели машинного обучения?
С одной стороны, я считаю, что числовое кодирование может быть разумным, поскольку время - это прогрессирующий процесс (за пятым месяцем следует шестой), но с другой стороны, я думаю, что категориальное кодирование может быть более разумным из-за циклического характера. лет и дней (за 12-м месяцем следует первый).
Есть ли общее решение или соглашение для этого?
Ответы:
Рассматривали ли вы добавление (синус, косинус) преобразования времени суток? Это гарантирует, что 0 и 23 часа, например, близки друг к другу, что позволяет циклической природе переменной просвечивать.
( Подробнее )
источник
Ответ зависит от вида отношений, которые вы хотите представить между временной характеристикой и целевой переменной.
Если вы кодируете время как числовое, то вы накладываете определенные ограничения на модель. Для модели линейной регрессии влияние времени теперь монотонно, либо цель будет увеличиваться или уменьшаться со временем. Для деревьев решений значения времени, близкие друг к другу, будут сгруппированы.
Кодирование времени как категориального дает модели большую гибкость, но в некоторых случаях модель может не иметь достаточно данных для хорошего изучения. Один метод, который может быть полезен, состоит в том, чтобы сгруппировать значения времени вместе в некоторое количество наборов и использовать набор в качестве категориального атрибута.
Некоторые примеры групп:
Каждое из вышеперечисленного также может использоваться непосредственно в качестве категориального атрибута, учитывая достаточно данных. Кроме того, группировки могут быть обнаружены путем анализа данных, чтобы дополнить подход, основанный на знании предметной области.
источник
Я рекомендую использовать числовые функции. Использование категориальных функций по существу означает, что вы не считаете расстояние между двумя категориями значимым (например, категория 1 так же близка к категории 2, как и к категории 3). Это определенно не относится к часам или месяцам.
Однако проблема, которую вы поднимаете, заключается в том, что вы хотите представлять часы и месяцы таким образом, чтобы 12 было так же близко к 11, как и к 1. Чтобы достичь этого, я рекомендую следовать тому, что было предложено в комментариях, и использовать функция синуса / косинуса перед использованием часов / месяцев в качестве числовых функций.
источник
Это зависит от того, какой алгоритм вы используете.
Если вы используете древовидные алгоритмы, такие как случайный лес, просто пропустите этот вопрос. Категориальное кодирование не обязательно для древовидных алгоритмов.
Для других алгоритмов, таких как нейронная сеть, я предлагаю попробовать оба метода (непрерывный и категориальный). Эффект отличается в разных ситуациях.
источник
Поскольку все ваши данные хорошо определены, я бы предложил вам категориальную кодировку, которую также легче применять.
источник
Для того, чтобы перефразировать ответ предоставленный @raghu . Одно из основных различий между категориальными и числовыми характеристиками заключается в том, сопоставимы ли величины чисел, т. Е. 2019 больше, чем 2018, или декабрь (12) больше, чем март (3)? На самом деле, нет. Хотя в этих числах есть последовательный порядок, их величина не сопоставима. Таким образом, преобразование в категориальное значение может иметь больше смысла.
источник