本文概述
“在许多实际的数据科学活动中, 数据集将包含类别变量。这些变量通常存储为文本值”。 (实用业务Python)由于机器学习基于数学方程式, 因此当我们按原样保留分类变量时, 将引起问题。许多算法无需进一步操作即可支持分类值, 但在那种情况下, 它仍然是关于是否对变量进行编码的讨论主题。在这种情况下, 不支持分类值的算法将保留编码方法。让我们在这里讨论一些方法。
编码方法
标签编码
在标签编码中, 我们将每个类别映射到数字或标签。为类别选择的标签没有关系。因此, 具有一定联系或彼此接近的类别在编码后会丢失此类信息。
频率编码
这是一种利用类别的频率作为标签的方法。在频率与目标变量有某种联系的情况下, 它可以帮助模型根据数据的性质按正比例和反比例理解和分配权重。
一-热编码
在这种方法中, 我们将每个类别映射到一个包含1和0的矢量, 表示该特征是否存在。向量的数量取决于我们要保留的类别。对于高基数功能, 此方法会产生很多列, 从而大大减慢了学习速度。在一种热编码和伪编码之间以及何时使用一种热编码之间存在嗡嗡声。它们非常相似, 只是一种热编码产生的列数等于类别数, 而伪产生的数少一列。最终, 建模者应在验证过程中相应地进行处理。
虚拟变量陷阱:
假设你在分类功能中有两个类别。执行一次热编码后, 将有两列代表分类特征, 但是当你仔细观察时, 只有一个向量足以表示两个值。就像分类功能一样, 它们有两个值, 分别是”红色”和”蓝色”。在执行一次热编码之后, 将形成两个向量。一个表示”红色”, 另一个表示”蓝色”, 但是仅使用一个向量就可以学习信息, 而另一个向量将是恒定的。因此, 我们可以删除一个向量, 从而减少需要训练算法的数据。它可以帮助模型更好地执行以及解释模型工作的能力。在现实生活中, 有时候我们必须先满足许多分类特征, 然后才能获得结果。编码实践的确可以使你解决输入过程, 但也使过程变得复杂, 并需要学习大量的任务。
目标或影响或可能性编码
目标编码与标签编码类似, 不同的是标签与目标直接相关。例如, 特征标签中每个类别的平均目标编码是根据训练数据上目标变量的平均值来确定的。这种编码方法可以找出相似类别之间的关系, 但是这些关系仅限于类别内并且是目标本身。平均目标编码的优点是它不会影响数据量, 并且有助于更快地学习, 缺点是难以验证。在此编码方法的实现过程中, 需要进行规范化。访问python和R中的目标编码器。
编码统计
编码变异性描述了类别内各个编码的变异形式。当我们谈论一种热编码中的可变性时, 可变性取决于实施时间, 在该时间中, 可变性决定了对目标具有足够影响的类别数量。其他编码方法确实显示出显着的可变性, 该可变性在验证时已确定。
为了计算编码的可区分性, 我们计算类别的标签, 然后计算标签的标准偏差。这表明编码类别的可分辨性是它们很远或聚集在一个区域中。
请记住, 如果在生成模型的过程中采用简单的编码风格, 则该模型可能会偏向于更好地理解, 请访问此讨论;对于不同的模型, 你必须像估算回归那样估算编码方法可以表示目标编码。如果你有分类, 则可以进行相对频率编码。
最后, 我想分享一个scikit-learn-style转换器, 该转换器有助于使用不同的技术对分类变量进行编码。
category_encoders
该scikit-learn库提供了当前实现的以下技术:
- 序数
- 一站式
- 二元
- 赫尔默特对比
- 总对比度
- 多项式对比
- 后向差异对比
- 散列
- 游泳池
- 离开
- 目标编码
它支持熊猫数据框作为输入, 并可以转换数据。它还可以支持sklearn管道, 有关详细信息, 请访问此处。
如果你想了解更多关于scikit-learn的信息, 请参加srcmini的scikit-learn的监督学习课程。
评论前必须登录!
注册