У меня есть следующий набор данных, представленный как массив numpy
direccion_viento_pos
Out[32]:
array([['S'],
['S'],
['S'],
...,
['SO'],
['NO'],
['SO']], dtype=object)
Размер этого массива:
direccion_viento_pos.shape
(17249, 8)
Я использую python, и scikit научился кодировать эти категориальные переменные следующим образом:
from __future__ import unicode_literals
import pandas as pd
import numpy as np
# from sklearn import preprocessing
# from matplotlib import pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
Затем я создаю объект кодировщика меток:
labelencoder_direccion_viento_pos = LabelEncoder()
Я беру позицию столбца 0 (уникальный столбец) direccion_viento_pos
и применяю метод fit_transform()
, обращаясь ко всем их строкам:
direccion_viento_pos[:, 0] = labelencoder_direccion_viento_pos.fit_transform(direccion_viento_pos[:, 0])
Мой direccion_viento_pos
такой:
direccion_viento_pos[:, 0]
array([5, 5, 5, ..., 7, 3, 7], dtype=object)
До этого момента каждая строка / наблюдение direccion_viento_pos
имеет числовое значение, но я хочу решить неудобство веса в том смысле, что есть строки со значением более высоким, чем другие.
В связи с этим я создаю фиктивные переменные, , которые согласно этому ссылка:
Фиктивная переменная или индикаторная переменная - это искусственная переменная, созданная для представления атрибута с двумя или более различными категориями / уровнями.
Затем в моем контексте direccion_viento_pos
у меня есть 8 значений
SO
- Sur oesteSE
- Sur esteS
- СурN
- НортеNO
- Nor oesteNE
- Nor esteO
- ОстеE
- Эсте
Это значит, 8 категорий. Затем я создаю OneHotEncoder с атрибутом categorical_features
, который указывает, какие функции будут обрабатываться как категориальные переменные.
onehotencoder = OneHotEncoder(categorical_features = [0])
И примените это onehotencoder
к нашей direccion_viento_pos
матрице.
direccion_viento_pos = onehotencoder.fit_transform(direccion_viento_pos).toarray()
Мой direccion_viento_pos
с их категоризированными переменными остался таким:
direccion_viento_pos
array([[0., 0., 0., ..., 1., 0., 0.],
[0., 0., 0., ..., 1., 0., 0.],
[0., 0., 0., ..., 1., 0., 0.],
...,
[0., 0., 0., ..., 0., 0., 1.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 1.]])
Затем, до этого момента, я создал фиктивные переменные для каждой категории.
Я хотел рассказать об этом процессе, чтобы ответить на свой вопрос.
Если эти фиктивные переменные кодировщика уже находятся в диапазоне от 0 до 1, необходимо ли применять масштабирование функции MinMaxScaler?
Некоторые говорят, что масштабировать эти фиктивные переменные необязательно. Другие говорят, что при необходимости, потому что мы хотим точности прогнозов.
Я задаю этот вопрос, потому что, когда я применяю MinMaxScaler
с feature_range=(0, 1)
, мои значения были изменены в некоторых положениях ... несмотря на то, что все еще сохраняю этот масштаб.
Какой лучший вариант я могу выбрать в отношении моего набора данных direccion_viento_pos
LabelEncoder
иOneHotEncoder
, в моем вопросе выше я использую вместе, и я получаю ожидаемый результат: кодификация (сLabelEncoder
) и категоризация (сOneHotEncoder
) относятся к ним. эти значения как категориальные значения позволяют избежать неудобного веса по отношению к этим значениям. - person bgarcial   schedule 31.05.2018LabelEncoder
иOneHotEncoder
. Более эффективен. - person bgarcial   schedule 31.05.2018