Фиктивные переменные, нужно ли их стандартизировать? - PullRequest
0 голосов
/ 28 мая 2018

У меня есть следующий набор данных, представленный как 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 имеетчисловое значение, но я хочу решить неудобство веса в том смысле, что есть строки со значением, более высоким, чем другие.

Из-за этого я создаю фиктивные переменные , которые в соответствии с этой ссылкой are:

Фиктивная переменная или переменная-индикатор - это искусственная переменная, созданная для представления атрибута с двумя или более различными категориями / уровнями

Затем в моемdireccion_viento_pos контекст, у меня 8 значений

  • SO - Sur oeste
  • SE - Sur este
  • S - Sur
  • N - Norte
  • NO - Nor oeste
  • NE - Nor este
  • O - Oeste
  • E - Este

Это значит, 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.]])

Затем, пока здесь, яЯ создал фиктивные переменные для каждой категории.

Dirección del viento categorizada

Я хотел бы рассказать об этом процессе, чтобы прийти к моему вопросу.

Если эти фиктивные переменные кодировщика уже находятся вдиапазон 0-1, необходимо ли применять масштабирование объектов MinMaxScaler?

Некоторые говорят, что нет необходимости масштабировать эти фиктивные переменные.Другие говорят, что при необходимости, потому что мы хотим точности в предсказаниях

Я задаю этот вопрос из-за того, что когда я применяю MinMaxScaler с feature_range=(0, 1), мои значения были изменены в некоторых позициях ... несмотря на то, что все еще сохраняютсяэта шкала.

Какой наилучший вариант я могу выбрать для своего набора данных direccion_viento_pos

1 Ответ

0 голосов
/ 02 октября 2018

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

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

...