[译] 在机器学习中为何要进行 One-Hot 编码

在机器学习中为何要进行 One-Hot 编码?

入门机器学习应用,尤为是须要对实际数据进行处理时,是很困难的。前端

通常来讲,机器学习教程会推荐你或要求你,在开始拟合模型以前,先以特定的方式准备好数据。python

其中,一个很好的例子就是对类别数据(Categorical data)进行 One-Hot 编码(又称独热编码)。android

  • 为何 One-Hot 编码是必要的?
  • 为何你不能直接使用数据来拟合模型?

在本文中,你将获得上述重要问题的答案,并能更好地理解机器学习应用中的数据准备工做。ios

什么是类别数据?

类别数据是一种只有标签值而没有数值的变量。git

它的值一般属于一个大小固定且有限的集合。github

类别变量也常被称为标称值(nominal)算法

下面举例说明:后端

  • 宠物(pet)变量包含如下几种值:狗(dog)、猫(cat)。
  • 颜色(color)变量包含如下几种值:红(red)、绿(green)、蓝(blue)。
  • 位次(place)变量包含如下几种值:第一(first)、第二(second)和第三(third)。

以上例子中的每一个值都表明着一个不一样的类别。bash

有些类别彼此间存在必定的天然关系,好比天然的排序关系。机器学习

上述例子中,位次(place)变量的值就有这种天然的排序关系。这种变量被称为序数变量(ordinal variable)。

类别数据有什么问题?

有些算法能够直接应用于类别数据。

好比,你能够不进行任何数据转换,将决策树算法直接应用于类别数据上(取决于具体实现方式)。

但还有许多机器学习算法并不能直接操做标签数据。这些算法要求全部的输入输出变量都是数值(numeric)。

一般来讲,这种限制主要是由于这些机器学习算法的高效实现形成的,而不是算法自己的限制。

但这也意味着咱们须要把类别数据转换成数值形式。若是输出变量是类别变量,那你可能还得将模型的预测值转换回类别形式,以便在一些应用中展现或使用它们。

如何将类别数据转换成数值数据?

这包含两个步骤:

  1. 整数编码
  2. One-Hot 编码

1. 整数编码

第一步,先要给每一个类别值都分配一个整数值。

好比,用 1 表示红色(red),2 表示绿色(green),3 表示蓝色(blue)。

这种方式被称为标签编码或者整数编码,能够很轻松地将它还原回类别值。

对于某些变量来讲,这种编码就足够了。

整数之间存在天然的排序关系,机器学习算法也许能够理解并利用这种关系。

好比,前面的位次(place)例子中的序数变量就是一个很好的例子。对于它咱们只须要进行标签编码就够了。

2. One-Hot 编码

但对于不存在次序关系的类别变量,仅使用上述的整数编码是不够的。

实际上,使用整数编码会让模型假设类别间存在天然的次序关系,从而致使结果不佳或获得意外的结果(预测值落在两个类别的中间)。

这种状况下,就要对整数表示使用 One-Hot 编码了。One-Hot 编码会去除整数编码,并为每一个整数值都建立一个二值变量。

在颜色(color)的示例中,有 3 种类别,所以须要 3 个二值变量进行编码。对应的颜色位置上将被标为“1”,其它颜色位置上会被标为“0”。

好比:

red, green, blue
1, 0, 0
0, 1, 0
0, 0, 1
复制代码

在统计学等领域中,这种二值变量一般被称为“虚拟变量”或“哑变量”(dummy variable)。

One-Hot 编码教程

若是你想了解如何在 Python 对你的数据进行 One-Hot 编码,请参阅:

拓展阅读

总结

在本文中,你应该了解了为何在使用机器学习算法时一般要对类别数据进行编码。

特别要注意:

  • 类别数据的定义是由一组有限集合中的值构成的变量。
  • 大多数机器学习算法都须要输入数值变量,并会输出数值变量。
  • 经过整数编码与 One-Hot 编码能够将类别数据转换为整型数据。

还有别的问题?

请在评论中留下你的问题,我会尽力回答。

若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

相关文章
相关标签/搜索