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

Почему алгоритмы машинного обучения ненавидят степени

Проще говоря, они не гладкие! Я имею в виду, что шкала градусов телепортируется с 359 обратно на 0 градусов по мере продвижения. Смотреть:

В этом формате алгоритм приличного градиента не знает, что 350 градусов - это 10 градусов от 0 градусов, и поэтому никогда не создаст надежную модель.

Грех и Кос спешат на помощь!

Чтобы решить эти проблемы, мы просто конвертируем степени в SIN и COS и используем их в качестве наших функций. Теперь нет телепортации и правильно измеряются расстояния:

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

Попался!

Одним из недостатков является то, что теперь, если вы хотите предсказать направление (т. Е. Направление является вашей целевой функцией), вам придется создать 2 предиктора: один для прогнозирования SIN и один для COS, а затем объединить их, используя atan2 функция.

import numpy as np
degrees_array = np.arctan2(sin_array, cos_array) * 180 / np.pi
# will be in the range -180 : 180, 
# use modulo to wrap it to the range 0 : 360
degrees_array_fixed_range = np.mod(degrees_array, 360)

См. Полный пример прогнозирования значения вращения с использованием 2 предикторов:

Https://github.com/ZackAkil/optimising-training-data-meetup/blob/master/CL-DS-PN%20Optimising%20data%20-%20My%20Solution.ipynb