分类任务中-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
相关产品推荐
相关产品推荐

