Как стандартизировать категориальные переменные, связанные с метками времени - PullRequest
0 голосов
/ 24 мая 2019

У меня есть набор данных, который имеет 8 смешанных функций (6 числовых и 2 категориальных).Поскольку числовые значения имеют разные диапазоны, мне придется нормализовать набор данных в целом, чтобы иметь возможность выполнять более сложные действия, такие как алгоритмы машинного обучения, уменьшение размерности (извлечение признаков).

Мой исходный набор данных:

time          v1     v2    v3   ...     v7      v8
00:00:01     15435   0.7   13   ...    High   True
00:00:06     24356   3.6   23   ...    High   True
00:00:11     25567   8.3   82   ...    LOW    False
00:00:16     12345   5.4   110   ...   LOW    True
00:00:21     43246   1.7   93   ...    High   False
................................................
23:23:59     23456   3.8   45   ...    LOW    False

, где v1 - v6 - числовая переменная, в которой их значения находятся в разных диапазонах, как это видно выше.Более того, v7 и v8 являются категориальными переменными, которые имеют только два выхода (для v7 {High, Low} и для v8 {True, False}).

Я сделал кодирование меток для категориальных переменных (v7 и v8)где High и True были закодированы 1, а LOW и False были закодированы 0.

Ниже показано, как выглядит набор данных после кодирования метки:

time          v1     v2    v3   ...     v7      v8
00:00:01     15435   0.7   13   ...     1       1
00:00:06     24356   3.6   23   ...     1       1
00:00:11     25567   8.3   82   ...     0       0
00:00:16     12345   5.4   110   ...    0       1
00:00:21     43246   1.7   93   ...     1       0
................................................
23:23:59     23456   3.8   45   ...     0       0

Мой вопрос заключается в следующем:легко стандартизировать числовые функции от v1 до v6.Однако я не уверен, стоит ли стандартизировать категорические наблюдения, и если да, то каков будет наилучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Нормализация изменяет масштаб значений в диапазоне от 0 до 1. Ваши значения уже находятся в этом диапазоне, вам потребуется нормализация категориальных значений только в том случае, если количество элементов действительно очень велико, но сейчас вы можете оставить их как есть. Я также предлагаю вам нормализовать весь ваш набор данных. Тогда все значения будут в одном и том же диапазоне, и, следовательно, не будут ошибочно изучать что-либо, отдавая предпочтение какой-либо функции с более высокими числовыми значениями. Вы можете найти как нормализацию, так и масштабирование в самом Scikit Learn.

from sklearn import preprocessing
X=your_data
normalized_X = preprocessing.normalize(X)
0 голосов
/ 24 мая 2019

Вы можете использовать время UNIX, например:

import pandas as pd 
import numpy as np

date = pd.date_range('1/1/2011', periods = 10, freq ='H')   
df = pd.DataFrame({'date':date})
df['unix_time'] = df['date'].astype(np.int64) // 10**9

df

вывод:

                 date   unix_time
0 2011-01-01 00:00:00  1293840000
1 2011-01-01 01:00:00  1293843600
2 2011-01-01 02:00:00  1293847200
3 2011-01-01 03:00:00  1293850800
4 2011-01-01 04:00:00  1293854400
5 2011-01-01 05:00:00  1293858000
6 2011-01-01 06:00:00  1293861600
7 2011-01-01 07:00:00  1293865200
8 2011-01-01 08:00:00  1293868800
9 2011-01-01 09:00:00  1293872400

Теперь ваши алгоритмы машинного обучения могут сравнивать дату, также вы можете конвертировать дату назад:

pd.to_datetime(df['unix_time'], unit='s')

вывод:

0   2011-01-01 00:00:00
1   2011-01-01 01:00:00
2   2011-01-01 02:00:00
3   2011-01-01 03:00:00
4   2011-01-01 04:00:00
5   2011-01-01 05:00:00
6   2011-01-01 06:00:00
7   2011-01-01 07:00:00
8   2011-01-01 08:00:00
9   2011-01-01 09:00:00
Name: unix_time, dtype: datetime64[ns]
...