【问题标题】:Ordinal Encoding or One-Hot-Encoding序数编码或 One-Hot-Encoding
【发布时间】:2021-11-02 06:12:45
【问题描述】:

如果我们不确定分类特征的性质,例如它们是名义特征还是有序特征,我们应该使用哪种编码?序数编码还是单热编码? 关于这个主题有明确定义的规则吗?

我看到很多人在没有方向的分类数据上使用 Ordinal-Encoding。 假设一个频率表:

some_data[some_col].value_counts()
[OUTPUT]
color_white    11413
color_green     4544
color_black     1419
color_orang        3
Name: shirt_colors, dtype: int64

在本专栏中有很多人更喜欢使用 Ordinal-Encoding。而且我一心想要使用 One-Hot-Encoding。 我对此的看法是,进行 Ordinal Encoding 会为这些颜色分配一些有序的数字,这意味着排名。而且一开始就没有排名。换句话说,我的模型不应该认为 color_white 是 4 而 color_orang 是 0 或 1 或 2。 请记住,数据描述中也没有任何排名或顺序的提示。

我对这个话题的理解如下:

既没有方向也没有大小的数字是名义变量。例如,fruit_list =['apple','orange',banana']。除非有特定的上下文,否则该集合将被称为名义集合。 对于此类变量,我们应该执行 get_dummies 或 one-hot-encoding

而序数变量有一个方向。例如, shirt_sizes_list = [大、中、小]。这些变量称为序数变量。如果同一个水果列表背后有一个上下文,比如价格或营养价值,即可以给水果列表中的水果一些排名或顺序,我们称之为序数变量。 对于序数变量,我们执行序数编码

我的理解正确吗? 请提供您的反馈 这个话题变成了噩梦 谢谢!

【问题讨论】:

    标签: machine-learning categorical-data one-hot-encoding dummy-variable ordinal


    【解决方案1】:

    你是对的。选择OrdinalEncoderOneHotEncoder 时要考虑的一件事是数据的顺序重要吗?

    大多数机器学习算法会假设两个邻近的值比两个遥远的值更相似。这在某些情况下可能没问题,例如,对于有序类别,例如:

    • quality = ["bad", "average", "good", "excellent"]
    • shirt_size = ["large", "medium", "small"]

    但显然不是这样的:

    • color = ["white","orange","black","green"]

    列(除了需要考虑光谱的情况,例如从白色到黑色。请注意,在这种情况下,white 类别应编码为0black应编码为类别中的最高数字),​​或者如果您有某些情况,例如,类别 0 和 4 可能比类别 0 和 1 更相似。要解决此问题,一种常见的解决方案是创建一个二进制文件每个类别的属性(One-Hot 编码)

    【讨论】:

    • 说得通 :) 非常感谢 Kaveh
    • @Kaveh 如果颜色变量有大量的类,我们应该怎么做。例如 10,如果我们对它们进行热编码,那会增加输入数据的维数吗?
    • @Kishore 您仍然可以使用单锄编码。我认为 10 作为一个维度还不足以让您提供另一个解决方案。但是,如果您有大量类别,则可能有一些替代方法,例如sparse data structure
    • @Kaveh 谢谢!现在说得通了。
    猜你喜欢
    • 2018-07-10
    • 2014-10-17
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2020-01-21
    相关资源
    最近更新 更多