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
-SurS
-NorteN
-也不是oeste否
-也不NE
-OesteO
-EsteE
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
即可进行此操作。它的效率更高。