虚拟变量,是否有必要对其进行标准化?

Dummy variables, is necessary to standardize them?

我将以下数据集表示为 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的每个row/observation都有一个数值,但我想解决权重的不便,因为有些行的值比其他行高。

因此,我创建了虚拟变量,which according to this reference 是:

A Dummy variable or Indicator Variable is an artificial variable created to represent an attribute with two or more distinct categories/levels

然后,在我的 direccion_viento_pos 上下文中,我有 8 个值

这意味着,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.]])

然后,到这里为止,我已经为每个类别创建了虚拟变量。

我想叙述这个过程,以得出我的问题。

如果这些虚拟编码器变量已经在 0-1 范围内,是否有必要应用 MinMaxScaler 特征缩放?

有人说没有必要对这些虚构的变量进行缩放。其他人说,如果有必要,因为我们希望预测准确

我问这个问题是因为当我将 MinMaxScalerfeature_range=(0, 1) 一起应用时 我的价值观在某些位置已经改变......尽管仍然保持这个比例。

关于我的数据集,我必须选择的最佳选项是什么 direccion_viento_pos

我认为缩放它们根本不会改变答案。他们都已经在同一个规模上了。最小值 0,最大值 1,范围 1。如果存在一些连续变量,您可能只想对连续变量进行归一化,而不考虑虚拟变量。您可以使用最小-最大缩放器为这些连续变量提供相同的零最小值、一最大值、1 范围。这样您的回归斜率就很容易解释了。您的虚拟变量已经标准化。

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