【问题标题】:Dummy variables, is necessary to standardize them?虚拟变量,有必要对其进行标准化吗?
【发布时间】: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 特征缩放?

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

我问这个问题是因为我将MinMaxScalerfeature_range=(0, 1) 一起应用 我的价值观在某些位置发生了变化……尽管仍然保持这个比例。

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

【问题讨论】:

  • this post question 我收到了关于它的介绍。使用 LabelEncoder 和使用 OneHotEncoder 时存在差异,在我上面的问题中,我使用了一起,我得到了预期的结果,即 codification (使用 LabelEncoder )和分类(使用 OneHotEncoder )将这些值视为分类值,以避免与这些值相关的权重。
  • 但是,有一个pd.get_dummies 函数: > 将分类变量转换为虚拟/指示变量.. 在不应用LabelEncoderOneHotEncoder 的情况下进行此操作。效率更高。

标签: python scikit-learn data-science dummy-variable


【解决方案1】:

我认为缩放它们根本不会改变答案。它们已经处于相同的规模。最小值 0,最大值 1,范围 1。如果存在一些连续变量,您只想对连续变量进行归一化,而只留下虚拟变量。您可以使用 min-max 缩放器为这些连续变量提供相同的最小值零,最大值为一,范围为 1。然后您的回归斜率将很容易解释。您的虚拟变量已经标准化。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2013-07-27
    • 2017-04-05
    • 2018-11-27
    • 1970-01-01
    • 2021-04-22
    • 2020-09-08
    相关资源
    最近更新 更多