【问题标题】:Numerically representing Nominal Data whilst retaining data semantics数字表示名义数据,同时保留数据语义
【发布时间】:2013-12-14 21:17:11
【问题描述】:

我有一个名义特征和数字特征的数据集。如果可能的话,我希望能够完全用数字来表示这个数据集。

理想情况下,我可以为 n 元名义特征执行此操作。我意识到在二进制情况下,可以用整数表示两个标称值。然而,当一个名义特征可以有许多排列时,如果有的话,这怎么可能呢?

【问题讨论】:

    标签: machine-learning data-mining data-representation


    【解决方案1】:

    有许多技术可以将分类属性“嵌入”为数字。

    例如,给定一个可以取值 redgreenblue 的分类变量,我们可以简单地将其编码为 三个 属性 isRed={0,1}isGreen={0,1}isBlue={0,1}.

    虽然这很流行,而且显然会“奏效”,但许多人误以为事后数值处理技术会产生合理的结果。

    如果你运行例如k-means 在以这种方式编码的数据集上,之后的结果可能不会太有意义。特别是,如果您得到诸如isRed=.3 isGreen=.2 isBlue=.5 之类的平均值 - 您无法合理地将其映射回原始数据。更糟糕的是,使用某些算法你甚至可能会得到isRed=0 isGreen=0 isBlue=0

    我建议您尝试处理您的实际数据,并尽可能避免编码。如果您有一个好的工具,它将允许您使用混合数据类型。 不要尝试将所有内容都设为数字向量。这种数据的数学视图非常有限,并且数据不会为您提供从该视图中受益所需的所有数学假设(例如度量空间)。

    【讨论】:

      【解决方案2】:

      不要这样做:我正在尝试将某些名义属性编码为整数。

      除非名义特征只有两个排列。可以使用任何不同的整数(例如 1 和 3)。

      但如果有两个以上的排列,则不能使用整数。假设我们将 1、2 和 3 分配给三个排列。正如我们所见,由于差异,1-2 和 2-3 之间的相关性高于 1-3。

      相反,为每个标称属性的每个值使用单独的二元特征。因此,您的问题的答案是:这是不可能/明智的。

      【讨论】:

        【解决方案3】:

        如果您使用 pandas,您可以在名义价值列上使用名为 .get_dummies() 的函数。这会将N 唯一值的列转换为N(或者如果你想要N-1,称为drop_first)新列,如果存在值,则用10 指示。

        例子:

        s = pd.Series(list('abca'))
        
        get_dummies(s)
           a  b  c
        0  1  0  0
        1  0  1  0
        2  0  0  1
        3  1  0  0
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-22
          • 1970-01-01
          • 2017-06-21
          • 2012-05-11
          • 1970-01-01
          • 2013-11-14
          • 2012-09-20
          • 2020-01-25
          相关资源
          最近更新 更多