序数编码或 One-Hot 编码

问题描述 投票:0回答:1

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

我看到很多人在没有方向的分类数据上使用序数编码。 假设有一个频数表:

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

有很多人更喜欢在本专栏上进行序数编码。我一心一意地选择 One-Hot-Encoding。 我对此的看法是,执行Ordinal Encoding将为这些颜色分配一些有序数字,我暗示了一个排名。而且一开始就没有排名。换句话说,我的模型不应该将 color_white 视为 4,将 color_orang 视为 0 或 1 或 2。 请记住,数据描述中也没有任何排名或顺序的暗示。

我对这个话题有以下理解:

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

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

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

machine-learning categorical-data one-hot-encoding dummy-variable ordinal
1个回答
7
投票

选择

OrdinalEncoder
OneHotEncoder
时需要考虑的一件事是 数据的顺序重要吗?

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

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

但显然情况并非如此:

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

列(除了需要考虑频谱的情况,例如从白到黑。请注意,在这种情况下,

white
类别应编码为
0
black
应编码为最高类别中的数字),或者如果您有某些情况,例如,类别 0 和 4 可能比类别 0 和 1 更相似。要解决此问题,一种常见的解决方案是为每个类别创建一个二元属性(One-热编码)

© www.soinside.com 2019 - 2024. All rights reserved.