【发布时间】:2018-11-06 12:02:46
【问题描述】:
我有以下数据集表示为 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- 南洋 -
SE- 很好 -
S- 苏尔 -
N- 北区 -
NO- Nor oeste -
NE- Nor este -
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,我必须选择的最佳选项是什么
【问题讨论】:
-
在this post question 我收到了关于它的介绍。使用
LabelEncoder和使用OneHotEncoder时存在差异,在我上面的问题中,我使用了一起,我得到了预期的结果,即 codification (使用LabelEncoder)和分类(使用OneHotEncoder)将这些值视为分类值,以避免与这些值相关的权重。 -
但是,有一个pd.get_dummies 函数: > 将分类变量转换为虚拟/指示变量.. 在不应用
LabelEncoder和OneHotEncoder的情况下进行此操作。效率更高。
标签: python scikit-learn data-science dummy-variable