虚拟变量,是否有必要对其进行标准化?
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 个值
SO
- Sur oeste
SE
- 南方
S
- 南
N
- 北方
NO
- 东北
NE
- 北方
O
- 奥斯特
E
- 埃斯特
这意味着,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 特征缩放?
有人说没有必要对这些虚构的变量进行缩放。其他人说,如果有必要,因为我们希望预测准确
我问这个问题是因为当我将 MinMaxScaler
与 feature_range=(0, 1)
一起应用时
我的价值观在某些位置已经改变......尽管仍然保持这个比例。
关于我的数据集,我必须选择的最佳选项是什么 direccion_viento_pos
我认为缩放它们根本不会改变答案。他们都已经在同一个规模上了。最小值 0,最大值 1,范围 1。如果存在一些连续变量,您可能只想对连续变量进行归一化,而不考虑虚拟变量。您可以使用最小-最大缩放器为这些连续变量提供相同的零最小值、一最大值、1 范围。这样您的回归斜率就很容易解释了。您的虚拟变量已经标准化。
这里有一个 related question 询问是否应该标准化二进制变量。
我将以下数据集表示为 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 个值
SO
- Sur oesteSE
- 南方S
- 南N
- 北方NO
- 东北NE
- 北方O
- 奥斯特E
- 埃斯特
这意味着,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 特征缩放?
有人说没有必要对这些虚构的变量进行缩放。其他人说,如果有必要,因为我们希望预测准确
我问这个问题是因为当我将 MinMaxScaler
与 feature_range=(0, 1)
一起应用时
我的价值观在某些位置已经改变......尽管仍然保持这个比例。
关于我的数据集,我必须选择的最佳选项是什么 direccion_viento_pos
我认为缩放它们根本不会改变答案。他们都已经在同一个规模上了。最小值 0,最大值 1,范围 1。如果存在一些连续变量,您可能只想对连续变量进行归一化,而不考虑虚拟变量。您可以使用最小-最大缩放器为这些连续变量提供相同的零最小值、一最大值、1 范围。这样您的回归斜率就很容易解释了。您的虚拟变量已经标准化。
这里有一个 related question 询问是否应该标准化二进制变量。