能否用MultiLabelBinarizer合并多类以生成单一标签项?
解决方法
原生的MultiLabelBinarizer不支持直接合并已有类别,但可以通过先对标签做映射转换的方式,借助它来实现你的需求,既不用自定义复杂的二值化逻辑,也能保证处理效率。
具体操作逻辑如下:
- 先定义类别映射规则,把需要合并的类别统一映射到同一个新类别
- 将原始样本中的标签按规则批量转换
- 再用
MultiLabelBinarizer处理转换后的标签
代码示例
from sklearn.preprocessing import MultiLabelBinarizer # 原始类别集合 original_labels = ['a', 'b', 'c', 'd', 'e'] # 定义合并映射:a/b合并为'ab',d/e合并为'de',c保持原样 label_mapping = {'a': 'ab', 'b': 'ab', 'c': 'c', 'd': 'de', 'e': 'de'} # 原始样本标签 x = ['a', 'c', 'd'] y = ['a', 'b', 'e'] z = ['c', 'd', 'e'] # 批量转换样本标签:用映射规则替换原始标签 transformed_samples = [ [label_mapping[label] for label in x], [label_mapping[label] for label in y], [label_mapping[label] for label in z] ] # 使用MultiLabelBinarizer处理转换后的标签 mlb = MultiLabelBinarizer() result = mlb.fit_transform(transformed_samples) print(result)
输出结果
[[1 1 1] [1 0 1] [0 1 1]]
这种方式完全依托MultiLabelBinarizer的高效实现,仅增加了一步字典映射的预处理——字典查找是O(1)操作,哪怕类别数量极多,处理效率也不会受影响,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者Tobi
相关产品推荐
相关产品推荐

