Binary Encoding是将每个整数表示为二进制数,然后按位拆分为多个二进制变量。这种方法旨在减少维度,同时避免了One-Hot Encoding的高维稀疏问题。
Binary encoding for categorical variables, similar to onehot, but stores categories as binary bitstrings.
例如,如果有一个分类变量有3个类别,分别用0、1、2表示,那么它们的二进制编码可能如下:
这样,每个类别都被编码为一个唯一的二进制数。
优点:
缺点:
以下是使用Python的category_encoders
库进行Binary Encoding的简单示例:
import pandas as pd
from category_encoders import BinaryEncoder
# 创建示例数据
data = {'Category': [0, 1, 2, 3, 0, 1, 2, 3]} # 可以增加类别
df = pd.DataFrame(data)
# 初始化BinaryEncoder
encoder = BinaryEncoder(cols=['Category'])
# 对分类变量进行二进制编码
df_encoded = encoder.fit_transform(df)
# 打印编码后的数据
df_encoded
输入 | 输出 |
---|---|
[0, 1, 2, 3, 0, 1, 2, 3] | |
[0, 1, 2, 0, 1, 2] | |
[0, 1, 2, 0, 1, 2,3,4,5,6,7,8,9] | |
可以修改示例数据中的类别,比如增加到7、8、9等等,会发现相比起独热编码——将每个类别作为一列,使用0和1判断是否属于这一个类别,二进制方法不会新增更多的维度(列)。
Binary Encoding主要适用于树状模型,如决策树、随机森林和梯度提升树等。这是因为这些模型能够有效处理高维度的输入,且不受类别大小关系的影响。在处理大规模数据集时,Binary Encoding能够在保持模型性能的同时降低计算成本,使其成为一种有效的特征工程方法。
总体而言,Binary Encoding在适用场景下是一种强大的编码方法,通过平衡维度减少和空间效率,为建模提供了一种有效的特征表示方式。
官方文档:https://contrib.scikit-learn.org/category_encoders/