Фиктивные переменные, нужно ли их стандартизировать?

У меня есть следующий набор данных, представленный как массив 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 oeste
  • SE - Sur este
  • S - Сур
  • N - Норте
  • NO - Nor oeste
  • NE - Nor este
  • O - Осте
  • 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


person bgarcial    schedule 27.05.2018    source источник
comment
В этом вопросе Я получил ориентацию по этому поводу. Существует разница между использованием LabelEncoder и OneHotEncoder, в моем вопросе выше я использую вместе, и я получаю ожидаемый результат: кодификацияLabelEncoder) и категоризация (с OneHotEncoder) относятся к ним. эти значения как категориальные значения позволяют избежать неудобного веса по отношению к этим значениям.   -  person bgarcial    schedule 31.05.2018
comment
Но есть функция pd.get_dummies, которая : ›Преобразование категориальных переменных в фиктивные / индикаторные переменные .. без применения LabelEncoder и OneHotEncoder. Более эффективен.   -  person bgarcial    schedule 31.05.2018


Ответы (1)


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

Вот связанный с этим вопрос, спрашивающий, следует ли когда-либо стандартизировать двоичные переменные.

person Sean McCarthy    schedule 02.10.2018