二分类和多分类的区别
- 都是one-hot编码格式的话:多分类是[[]] 两个【】,二分类是[] 一个【】
- 多分类的简易模式: 可能会出现非01的例如[1, 0, 2]
- 也就是多分类,1的位置索引可能在3个不同的位置
- 这是多分类的one-hot表示(2个样本,3个类别),一个样本有三个位置(1可能会出现3个位置),就会出3个类别 y_true = torch.tensor([[0, 1, 0], [1, 0, 0]], dtype=torch.float)
# 例子1:这是多分类的one-hot表示(2个样本,3个类别)
y_true = torch.tensor([[0, 1, 0], [1, 0, 0]], dtype=torch.float)
# 第一个样本:类别1(索引1处为1)
# 第二个样本:类别0(索引0处为1)
# 这是3分类问题(因为有3个位置)
# 例子2:这是二分类的类别索引表示
y_true = torch.tensor([1, 0], dtype=torch.float)
# 第一个样本:类别1
# 第二个样本:类别0
# 这是2分类问题(只有0和1两个值)
# 例子3:这是二分类的类别索引表示
y_true = torch.tensor([0, 1, 0], dtype=torch.float)
# 三个样本分别属于类别0、1、0
# 这是2分类问题(只有0和1两个值)
关键区别总结
二分类的标签表示:
# 方式1:类别索引(最常用)
y_true = torch.tensor([0, 1, 0, 1]) # 每个样本一个0或1
# 方式2:one-hot编码(较少用)
y_true = torch.tensor([[1, 0], [0, 1], [1, 0], [0, 1]])
多分类的标签表示:
# 方式1:类别索引(最常用)
y_true = torch.tensor([0, 2, 1, 0]) # 每个样本一个整数(0到K-1)
# 方式2:one-hot编码
y_true = torch.tensor([
[1, 0, 0], # 类别0
[0, 0, 1], # 类别2
[0, 1, 0], # 类别1
[1, 0, 0] # 类别0
])
判断分类数量的方法
从类别索引判断:
# 二分类:值只能是0或1
y_true = torch.tensor([0, 1, 0, 1]) # 2分类
# 多分类:值可以是0,1,2,...K-1
y_true = torch.tensor([0, 2, 1, 0]) # 至少3分类(因为有0,1,2)
从one-hot编码判断:
# 二分类:每个向量长度=2
y_true = torch.tensor([[1,0], [0,1], [1,0]]) # 2分类
# 多分类:每个向量长度=K(K>2)
y_true = torch.tensor([[1,0,0], [0,0,1], [0,1,0]]) # 3分类
您的主要理解是正确的:
- 通过看标签中不同值的数量来判断分类数
- 二分类只有0和1
- 多分类有0,1,2,...K-1
只是要注意表示格式的区别(类别索引 vs one-hot编码),但您对本质的理解是准确的!👍
1336

被折叠的 条评论
为什么被折叠?



