Сципи Детренд в python - PullRequest
2 голосов
/ 03 мая 2020

Я удалил свои данные в python, используя следующий код из scipy.signal.detrend

detrended =signal.detrend(feature, axis=-1, type='constant', bp=0, overwrite_data=True)
np.savetxt('constant detrend.csv', detrended, delimiter=',', fmt='%s')

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

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

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

Любая помощь будет оценена.

1 Ответ

2 голосов
/ 10 мая 2020

Согласно документам, detrend просто удаляет соответствие линии наименьших квадратов из данных. Когда вы используете type='constant', это еще проще, поскольку просто удаляет среднее значение:

Если type == 'constant', вычитается только среднее значение data .

Исходный код подтверждает это. После проверки входных данных все вычисления выполняются в одну строку (scipy/signal/signaltools.py, строка 3261 ):

 ret = data - np.expand_dims(np.mean(data, axis), axis)

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

mean = np.mean(feature, axis=-1, keepdims=True)
detrended = feature - mean

Вы можете сохранить среднее значение в файл или сделать с ним все, что захотите. Чтобы «повторить», просто добавьте среднее значение назад:

point = prediction + mean

Если у вас были какие-то другие манипуляции, которые вас беспокоили, например, нормализация до максимума, вы могли бы справиться с этим таким же образом.

max = np.amax(detrended, axis=-1, keepdims=True)
detrended /= max

В этом случае вам необходимо умножить перед смещением для повторного выполнения:

point = prediction * max + mean

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

...