首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编码多类响应变量

编码多类响应变量
EN

Data Science用户
提问于 2017-04-19 13:37:26
回答 2查看 4.5K关注 0票数 4

当响应变量有多个类时,例如“晴天”、“多雨”、“多云”时,我们应该如何编码它?我知道,对于这样的预测器,我们通常使用一次热编码,如果一个预测器有太多的类,那么我们可能只使用LabelEncode

当这个多类问题发生在响应变量中时,我想我们可以只使用LabelEncode(),而可以使用一个热编码,对吗?因为如果我们使用一个热编码,那么我们将有两个变量作为响应变量,而sklearn中的机器学习算法通常期望响应变量不是向量,对吗?(我的意思是,它期望一个长的一维向量,长度等于观察到的数目,而不是2D矩阵)。但另一方面,如果我们把“晴天”、“多雨”、“多云”映射为{1,2,3}或{0,1,2}或任何3个数字,就会造成“晴天”、“多雨”、“多云”之间的关系小于或大于或小于或大于“晴天”、“多雨”、“多云”之间的关系,这在原来的问题中并不是遗传的。

EN

回答 2

Data Science用户

发布于 2017-04-19 23:42:58

这取决于类的含义,以及它们是否有任何有意义的顺序。

如果它们是序数或刻度,那么就有一个有意义的排序,对它们进行排序并为类分配标签1, 2, \dots, n可能是合理的。这就是你所说的"LabelEncode“。在某些情况下,某种形式的回归也可能是适当的,值得一试。

如果它们是范畴化标称,没有有意义的排序,那么LabelEncode就没有任何意义,并且不会比一个热编码更好--甚至可能更糟。因此,默认情况下是一次热编码。

如果它们是绝对的,但是有一些层次结构,那么就会有更聪明的方法。您可以构建表示层次结构的树,然后进行多热编码.如果有n类,那么将有一棵树,其中包含n叶和(例如) m节点(其中有m > n)。然后,可以将类编码为m-vector,如果该类是树中节点i的后代,则该类的i第四项为1,否则为0。

如果类是分类的,但具有不同的属性,则可以尝试对每个可能的属性有一个元素的编码。例如,如果有k二进制属性,则根据对应的类是否具有ith属性,可以在ith条目中使用带有0或1的k-vector。您可以从那里概括到更一般的情况。

有关不同类型的度量的更多信息,请参见

票数 4
EN

Data Science用户

发布于 2021-01-01 17:33:17

这在很大程度上取决于软件。sklearn分类器将知道不按顺序处理标签编码的数据;也就是说,大多数/所有的分类器都会很好地使用原始字符串数据(在许多情况下,为了提高计算效率,在许多情况下将使用LabelEncoder )。如果您只对多类数据进行一次热编码,sklearn通常会认为您的问题是多标签问题,而不仅仅是多类问题,您的结果将是不同的。另见这个问题

但是,相反,大多数神经网络实现将期望多类目标预先进行一个热编码,并且您可能希望在最后一层使用softmax激活。

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/18456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档