虚拟变量是标准化它们所必需的吗?

时间:2018-05-27 22:35:37

标签: python scikit-learn data-science dummy-variable

我有以下数据集,如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() 

我取direccion_viento_pos的列位置0(唯一列)并应用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的每一行/观察都有一个数值,但我想解决重量不方便的问题,即行的值比其他行更高。

由于这个原因,我创建了虚拟变量,which according to this reference是:

  

虚拟变量或指标变量是一个人工变量,用于表示具有两个或多个不同类别/级别的属性

然后,在我的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个类别。 接下来,我使用categorical_features属性创建一个OneHotEncoder对象,该对象指定将哪些要素视为分类变量。

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 :(得分:1)

我认为扩展它们根本不会改变答案。它们已经处于相同的规模。最小0,最大1,范围1。如果存在一些连续变量,则只想对连续变量进行归一化,而忽略虚拟变量。您可以使用最小-最大定标器为这些连续变量赋予相同的最小值(零,最大值为1,范围为1)。然后,回归斜率将很容易解释。您的虚拟变量已被标准化。

这里有一个related question,询问是否应该标准化二进制变量。