企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 为什么One-Hot在机器学习中编码数据? > 原文: [https://machinelearningmastery.com/why-one-hot-encode-data-in-machine-learning/](https://machinelearningmastery.com/why-one-hot-encode-data-in-machine-learning/) 应用机器学习入门可能很困难,尤其是在处理实际数据时。 通常,机器学习教程会建议或要求您在安装机器学习模型之前以特定方式准备数据。 一个很好的例子是对分类数据使用单热编码。 * 为什么需要一个热门编码? * 为什么不能直接在数据上拟合模型? 在这篇文章中,您将发现这些重要问题的答案,并更好地理解应用机器学习中的数据准备。 让我们开始吧。 ![Why One-Hot Encode Data in Machine Learning?](https://img.kancloud.cn/a6/16/a616ff5c38a97e2f5f15331bc97aca7a_640x428.jpg) 为什么One-Hot在机器学习中编码数据? [Karan Jain](https://www.flickr.com/photos/jiangkeren/8263176332/) 的照片,保留一些权利。 ## 什么是分类数据? 分类数据是包含标签值而不是数值的变量。 可能值的数量通常限于固定集。 分类变量通常称为[名义](https://en.wikipedia.org/wiki/Nominal_category)。 一些例子包括: * “ _pet_ ”变量,其值为:“ _dog_ ”和“ _cat_ ”。 * “_颜色_”变量,其值为:“ _red_ ”,“ _green_ ”和“ _blue_ ”。 * “_位置_”变量的值为:“first”,“ _second_ ”_和_“ _third_ ”。 每个值代表一个不同的类别。 某些类别可能彼此具有自然关系,例如自然排序。 上面的“ _place_ ”变量确实具有值的自然排序。这种类别的分类变量称为序数变量。 ## 分类数据有什么问题? 某些算法可以直接使用分类数据。 例如,可以直接从分类数据中学习决策树,而无需数据转换(这取决于具体实现)。 许多机器学习算法不能直接对标签数据进行操作。它们要求所有输入变量和输出变量都是数字。 通常,这主要是机器学习算法的有效实现的约束,而不是算法本身的硬性限制。 这意味着必须将分类数据转换为数字形式。如果分类变量是输出变量,您可能还希望将模型的预测转换回分类形式,以便在某些应用程序中显示或使用它们。 ## 如何将分类数据转换为数字数据? 这涉及两个步骤: 1. 整数编码 2. 单热编码 ### 1.整数编码 作为第一步,为每个唯一类别值分配一个整数值。 例如,“ _red_ ”为1,“ _green_ ”为2,“ _blue_ ”为3。 这称为标签编码或整数编码,并且易于反转。 对于某些变量,这可能就足够了。 整数值彼此之间具有自然的有序关系,并且机器学习算法可能能够理解和利用这种关系。 例如,像上面的“地点”示例这样的序数变量就是一个很好的例子,标签编码就足够了。 ### 2.单热编码 对于不存在这种序数关系的分类变量,整数编码是不够的。 实际上,使用此编码并允许模型假设类别之间的自然排序可能导致表现不佳或意外结果(类别之间的预测中间)。 在这种情况下,可以将单热编码应用于整数表示。这是移除整数编码变量的位置,并为每个唯一整数值​​添加新的二进制变量。 在“_颜色_”变量示例中,有3个类别,因此需要3个二进制变量。 “1”值放在颜色的二进制变量中,“0”值放在其他颜色上。 例如: ```py red, green, blue 1, 0, 0 0, 1, 0 0, 0, 1 ``` 二进制变量在其他字段中通常称为“虚拟变量”,例如统计信息。 ## 进一步阅读 * [维基百科上的分类变量](https://en.wikipedia.org/wiki/Categorical_variable) * 维基百科上的[名义类别](https://en.wikipedia.org/wiki/Nominal_category) * 维基百科上的[虚拟变量](https://en.wikipedia.org/wiki/Dummy_variable_(statistics)) ## 摘要 在这篇文章中,您了解了为什么在使用机器学习算法时通常必须对分类数据进行编码。 特别: * 该分类数据被定义为具有有限标签值集的变量。 * 大多数机器学习算法都需要数字输入和输出变量。 * 使用整数和一个热编码将分类数据转换为整数数据。 你有任何问题吗? 将您的问题发表在下面的评论中,我会尽力回答。