TensorFlow/Keras随机森林:二分类分类变量输出为何特殊?
解答
1. 特殊处理的原因
TensorFlow Decision Forests(TFDF)会根据标签的类型和类别数量自动推断任务类型:
- 当检测到字符串型二分类标签时,会默认识别为二元分类任务,此时模型仅输出正类的概率(单个数值),这和传统机器学习框架(如Scikit-learn)的行为对齐,简化二元分类场景的输出。
- 当标签是数值型二分类或类别数≥3时,会识别为多分类任务,输出所有类别的概率分布向量。
2. 统一输出格式的方法
方法一:强制指定多分类任务类型
初始化模型时,通过task参数明确指定为多分类任务,强制模型输出所有类别的概率向量:
rf = tfdf.keras.RandomForestModel(task=tfdf.keras.Task.CLASSIFICATION)
修改后,分类型二分类的输出会变为二维概率向量,和多分类格式一致。
方法二:将字符串标签转为数值型
构建训练数据时,把字符串标签映射为整数,让TFDF将其识别为多分类任务:
# 修改训练数据构建部分 train_pd = pd.DataFrame([{"key":v, "value":values.index(v)} for _ in range(multi) for v in values])
这种方式下,即使是二分类的字符串标签,转换为数值后模型也会输出概率向量。
验证效果
修改后分类型二分类的输出示例:
[[0.99999917 0. ] [0. 0.99999917]]
内容的提问来源于stack exchange,提问作者Piotr Śniady
相关产品推荐
相关产品推荐

