二分類和多分類的區別

  • 都是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編碼),但您對本質的理解是準確的!👍