У меня есть следующий набор данных, представленный как 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.]])
Затем, пока здесь, яЯ создал фиктивные переменные для каждой категории.
Я хотел бы рассказать об этом процессе, чтобы прийти к моему вопросу.
Если эти фиктивные переменные кодировщика уже находятся вдиапазон 0-1, необходимо ли применять масштабирование объектов MinMaxScaler?
Некоторые говорят, что нет необходимости масштабировать эти фиктивные переменные.Другие говорят, что при необходимости, потому что мы хотим точности в предсказаниях
Я задаю этот вопрос из-за того, что когда я применяю MinMaxScaler
с feature_range=(0, 1)
, мои значения были изменены в некоторых позициях ... несмотря на то, что все еще сохраняютсяэта шкала.
Какой наилучший вариант я могу выбрать для своего набора данных direccion_viento_pos