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

Python 虚拟变量,是否有必要对其进行标准化?,python,scikit-learn,data-science,dummy-variable,Python,Scikit Learn,Data Science,Dummy Variable,我将以下数据集表示为numpyarray direccion_viento_pos Out[32]: array([['S'], ['S'], ['S'], ..., ['SO'], ['NO'], ['SO']], dtype=object) 此数组的维数为: direccion_viento_pos.shape (17249, 8) 我正

我将以下数据集表示为
numpy
array

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
direccion_viento_pos[:, 0]
array([5, 5, 5, ..., 7, 3, 7], dtype=object)
然后我创建一个标签编码器对象:

labelencoder_direccion_viento_pos = LabelEncoder() 
我采用
direccion\u viento\u pos
的列位置0(唯一列),并应用
fit\u transform()
方法寻址所有行:

 direccion_viento_pos[:, 0] = labelencoder_direccion_viento_pos.fit_transform(direccion_viento_pos[:, 0]) 
我的
direccion\u viento\u pos
是这样的:

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
direccion_viento_pos[:, 0]
array([5, 5, 5, ..., 7, 3, 7], dtype=object)
在此之前,
direccion\u viento\u pos
的每一行/观察值都有一个数值,但我想解决权重带来的不便,因为有些行的值高于其他行

因此,我创建了虚拟变量,它们是:

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

然后,在我的
direccion\u viento\u pos
上下文中,我有8个值

  • SO
    -奥斯特河畔
  • SE
    -东南海岸
  • S
    -Sur
  • N
    -Norte
  • -也不是oeste
  • NE
    -也不
  • O
    -Oeste
  • E
    -Este
这意味着,8个类别。 接下来,我使用
categorical\u features
属性创建一个对象,该属性指定哪些特征将被视为分类变量

onehotcoder=onehotcoder(分类功能=[0])

并将此
onehotencoder
应用于我们的
direccion\u viento\u pos
矩阵

direccion\u viento\u pos=onehotcoder.fit\u transform(direccion\u viento\u pos.toarray()

我的
direccion\u viento\u 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
时,范围=(0,1)
我的价值观在某些位置发生了变化。。。尽管如此,我们仍然要保持这种规模


就我的数据集而言,我必须选择的最佳选项是什么?我不认为缩放它们会改变答案。他们已经在同一个尺度上了。最小0,最大1,范围1。如果存在一些连续变量,您可能只希望规范化连续变量,而不考虑伪变量。您可以使用最小-最大定标器为这些连续变量指定相同的最小值0、最大值1、范围1。那么你的回归斜率就很容易解释了。您的虚拟变量已经规范化

这里有一个问题,人们是否应该标准化二进制变量

年,我收到了关于它的介绍。使用
LabelEncoder
和使用
onehotcoder
之间存在差异,在我上面的问题中,我一起使用,得到了预期的结果,即编码(使用
LabelEncoder
)和分类(使用
onehotcoder
)将这些值视为分类值,以避免与这些值相关的权重不方便。但是,有一个函数:>将分类变量转换为虚拟/指标变量。。无需应用
LabelEncoder
onehotcoder
即可进行此操作。它的效率更高。