You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

分类任务中-1和1标签的One Hot编码实现问题求助

解决-1/1二分类标签的One Hot编码问题

问题原因

keras.utils.np_utils.to_categorical要求输入是从0开始的连续非负整数类别,你的标签包含-1,它会被自动映射为0类,但因未提前统一标签格式,导致输出不符合预期。

解决方案

方案1:先映射标签为0/1再编码

先把-1转换成0(或1),1转换成1(或0),再使用to_categorical:

import numpy as np
from keras.utils import np_utils

# 将-1替换为0,1保持不变
Y_TRAIN_mapped = np.where(Y_TRAIN == -1, 0, Y_TRAIN)
# 执行One Hot编码
Y_TRAIN_One_hot = np_utils.to_categorical(Y_TRAIN_mapped, num_classes=2)

对应关系:

  • 原标签-1 → 编码[1, 0]
  • 原标签1 → 编码[0, 1]

若需调换编码对应关系,修改映射规则即可:

Y_TRAIN_mapped = np.where(Y_TRAIN == -1, 1, 0)
Y_TRAIN_One_hot = np_utils.to_categorical(Y_TRAIN_mapped, num_classes=2)

此时-1对应[0, 1],1对应[1, 0]。

方案2:手动构建One Hot矩阵

跳过to_categorical,直接根据标签生成编码矩阵,逻辑更直观:

import numpy as np

# 初始化全0的编码矩阵,行数为样本数,列数为类别数
Y_TRAIN_One_hot = np.zeros((len(Y_TRAIN), 2), dtype=np.float32)
# 给-1对应的样本设置第一列为1
Y_TRAIN_One_hot[Y_TRAIN == -1, 0] = 1
# 给1对应的样本设置第二列为1
Y_TRAIN_One_hot[Y_TRAIN == 1, 1] = 1

内容的提问来源于stack exchange,提问作者dev_neil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:40:28