У меня есть поле «час» в качестве моего атрибута, но оно принимает циклические значения. Как я мог преобразовать функцию, чтобы сохранить информацию, как '23' и '0' час близки.
Один способ, которым я мог бы подумать, - это сделать преобразование: min(h, 23-h)
Input: [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
Output: [0 1 2 3 4 5 6 7 8 9 10 11 11 10 9 8 7 6 5 4 3 2 1]
Есть ли какой-нибудь стандарт для обработки таких атрибутов?
Обновление: я буду использовать обучение под наблюдением, чтобы обучить классификатор случайных лесов!
feature-extraction
feature-scaling
featurization
Мангат Рай Моди
источник
источник
Ответы:
Наиболее логичный способ преобразования часа - это две переменные, которые качаются взад-вперед из раковины. Представьте себе положение конца часовой стрелки на 24-часовых часах. В
x
качаются позиции вперед и назад из раковины сy
позицией. Для 24-часовой вы можете сделать это сx=sin(2pi*hour/24)
,y=cos(2pi*hour/24)
.Вам нужны обе переменные или правильное движение во времени потеряно. Это связано с тем, что производная от sin или cos изменяется во времени, когда
(x,y)
положение плавно меняется при перемещении по единичному кругу.Наконец, подумайте, стоит ли добавлять третью функцию для отслеживания линейного времени, которая может быть построена из моих часов (или минут или секунд) с начала первой записи, или с отметкой времени Unix, или с чем-то подобным. Эти три функции затем обеспечивают прокси как для циклической, так и для линейной прогрессии времени, например, вы можете вытянуть циклическое явление, такое как циклы сна в движении людей, а также линейный рост, например, численность населения и время.
Надеюсь это поможет!
Добавим соответствующий пример кода, который я сгенерировал для другого ответа:
Пример выполнения:
Теперь давайте попробуем это:
Вы едва можете увидеть, что некоторые из них после полуночи включены в зеленый кластер до полуночи. Теперь давайте уменьшим количество кластеров и покажем, что до и после полуночи можно более подробно подключиться к одному кластеру:
Посмотрите, как синий кластер содержит моменты времени до и после полуночи, которые объединены в одном кластере ...
QED!
источник
Вопрос очень интересный, и я не помню, чтобы читать об интересных ответах. Поэтому я осмелюсь дать вам одно возможное решение, даже если оно выглядит достаточно сумасшедшим.
Обычно избегают иметь одну и ту же информацию в нескольких функциях, поскольку многие алгоритмы не могут справиться с этим. Но это не случайный лес. В отличие от линейной регрессии (и всех моделей, основанных на сходных идеях), случайные леса проверяют все функции, принимая во внимание каждую функцию по одному. Таким образом, можно кодировать одну и ту же информацию несколькими способами, не влияя на производительность обучения, только пространство и время выполнения.
Это тратит пространство и время, но я бы попробовал посмотреть, как это работает.
источник
В идеале вам не нужно никаких преобразований. Относительная разница во времени между двумя точками может использоваться как функция расстояния. Где классификация может быть основана на этом.
в яве:
источник