---
# System prepended metadata

title: 2.5 Learning Multiple Classes
tags: [ML]

---

# 2.5 Learning Multiple Classes

在前面的例子裡，family car 這個 class 是 positive examples，所有不是 family car 的其他種車是 negative examples。

這是一個只有兩個 classes 的問題，但是在 general case 裡，我們可能會有不只兩個 classes。

因此假設我們令 classes 總數為 $K$，用 <font color = "green">$C_i,\ i=1,...,K$</font> 來代表這 $K$ 個 classes，然後我們的 input instance 屬於這些 classes 的其中一個。
> 只能恰好屬於一個，一個 instance 不會同時屬於好幾個 classes。

![image](https://hackmd.io/_uploads/ryvem5ieR.png)

在用 ML 做 classification 的時候，我們會想 learn 的是++把一個 classes 裡的 instances 和<font color = "red">所有其他</font> classes 的 instances 分開來的邊界是什麼++，所以對 hypothesis $h_i$ 來說，屬於 class $C_i$ 的 training examples 是 positive instances，而所有其他 classes 的 examples 都是 negative instances。

$\rightarrow$ 因此，在 $K$-class 的問題中，我們有 $K$ ++個 hypothesis++

![2.9](https://hackmd.io/_uploads/rJ-ar5jg0.png)
> $i$ 這個 index 有 $K$ 個可能的值（如 $i=1,...,K$），對每個 $i$ 來說，我們會有 $C_i$，也就是第 $i$ 個 class，還有 $h_i()$， 也就是這個 class 對應的 hypothesis
> 
> $\rightarrow$ 每個 $h_i()$ 只會去辨別一個 example 到底是不是屬於這個 class $i$，對所有不是 class $i$ 的 examples，$h_i()$ 只會通通 output $0$，而不會再進一步分類。

所以，我們 total 的 emperical error 就是去加總每個 classes 對每個 instances 的 predictions：

![2.10](https://hackmd.io/_uploads/BywIuqog0.png)
> 假設我們先固定外面那層 $\sum$
> $\rightarrow$ 當 $t=1$ 時，我們的 example $x^t$ 固定為 $x^1$，也就是我們固定去看一號 example；接著 $i$ 會從 $1$ 跑到 $K$
> 
> 當 $i=1$ 時：
> $\Rightarrow$ 我們首先用會辨別 class $C_1$ 的 hypothesis $h_1(·)$ 去 predict $x^1$ 是不是屬於 $C_1$，預測出來的結果再去看看是不是跟我們的 required value $r_i^t$（此時是 $r_1^1$）相同。
> 
> 如果一樣的話，$h_i(x^t)\not=r_i^t=0$，也就是不會增加 emperical error；如果不同，代表預測錯誤，於是 $h_i(x^t)\not=r_i^t=1$，累加到 emperical error。
>
> 接著，我們對一樣是一號 example $x^1$ 做同樣的事，只是用二號 hypothesis $h_2(·)$ 去檢查它是否屬於第二個 class $C_2$，⋯⋯，一直做到檢查完 $x^1$ 是否屬於第 $K$ 個 class $C_K$，我們就對 $t=2$ ，也就是第二個 example 重複以上動作。

對於某個給定的 example $x$，理想上<font color = "red">恰好一個</font> $h_i(x),\ i=1,...,K$ 會 output $1$，也就是 $x$ 只屬於某個 class $C_i$。

但是，如果沒有任何一個 $h_i(x)$ 是 $1$，或是有好幾個 $h_i(x)$ 都是 $1$，那麼這樣的 case 就叫做 <font color = "snake">doubt</font>，然後我們的 classifier 就會 <font color = "snake">reject</font> 這樣的 cases。

![fig 2.9](https://hackmd.io/_uploads/Hy00QoseR.png)

在前面去 learn family car 的例子裡，我們只用一個 hypothesis 去 model 那些 positive examples，所有 negative examples 都不是 family car。

但是我們也可以用兩個 hypotheses，其中一個是對 positive instances，另外一個對 negative instances；這樣的做法++假定了那些 negative instances 的 structure 也可以被另一個 hypothesis 覆蓋++。

舉例來說：
區分 family cars 跟 sports cars，這兩個 classes 都有各自的 structure，好處是如果 input 是一台 luxury sedan，兩個 hypotheses 都能判定為 negative 然後 reject 這個 input。

:::warning
如果在一個 dataset 裡，我們期望所有的 classes 都有相似的 <font color = "orange">++distribution++，也就是 input space 裡的形狀</font>，那麼：
$\rightarrow$ 同樣的 hypothesis class 就可以用於所有的 classes。
:::

舉例來說：

在辨認手寫數字的 dataset 裡，我們會期望每個 digit 都有差不多的 distributions；但是在做醫療診斷的 dataset 裡，假設我們有兩個 classes，一個是健康的人、一個是生病的人，他們可能就會有完全不同的 distributions，因為雖然健康的人的樣子都差不多，但是生病的人每個都是因為不同的原因、有不同的症狀，這也就會反映在 input 上，讓每個 input 都非常不同。