# 2.1 Learning a Class from Examples - 本節常用的符號一覽: | 符號 | 意義 | | ---- | ---------------------------------------------- | | $C$ | 一個代表 family car 的 class | | $X$ | training set | | $x$ | 某台車的「價格」和「引擎動力」之值所構成的向量 | | $S$ | most specific hypothesis(滿足條件下最 tight 的長方形) | | $G$ | most general hypothesis(滿足條件下最大的長方形)| 假設我們想要 learn 一個 class $C$,代表 "family car" 我們有一個 set 蒐集不同的車,還有一群人可以去 survey,讓那些人去檢視這個 set 裡所有的車,然後一一 label,那些他們認為是 family car 的車就是 positive examples,不是的就是 negative examples。 $\rightarrow$ <font color = "snake">class learning</font> 就是去找到某個 "family car" 的描述(在這個例子裡),這樣的描述是所有 positive examples 都共享的,而 negative examples 則都沒有。 如果我們這麼做,假設給我們一台車,我們就能藉由去檢查它是否符合這樣的一個描述,來預測它是不是一台 family car。 假設我們得到的結論是人們區別是不是 family car 的標準是「價格」和「引擎動力」,那這兩個 attributes 就是 class recognizer 的 inputs。 > Note: 當我們把這兩個特點當作代表的 input,其他的 attributes 就被視為不相關的。 ![image](https://hackmd.io/_uploads/H15qHCVe0.png) > 圖為 "family car" 這個 class 的 trainging set > 這張圖中的每個圓圈代表一台車,裡面是 $-$ 代表它被認為不是 family car,裡面是 $+$ 則是。 這些 data 的數學表示方式: ![image](https://hackmd.io/_uploads/SkK-v04e0.png) 假設我們最後得到的結果是這樣: ![image](https://hackmd.io/_uploads/Hky9wRVxR.png) > 每個標示 $+$ 的圓圈是一台 family car,這些車都落在價格(橫軸,$x_1$)介於 $p_1$ 到 $p_2$ 之間、引擎動力(縱軸,$x_2$)介於 $e_1$ 到 $e_2$ 之間的灰色區域中。 > > 也就是: > ![image](https://hackmd.io/_uploads/HJEO_CVxR.png) 由上方的 $(2.4)$ 我們可以確定一個 Hypothesis Class $H$,裡面包含所有可能的灰色長方形。 > 「價格」和「引擎動力」的範圍應該要落在哪裡才會被認為是 family car,這個標準可能有很多種,因此可以畫出許多種不同的灰色長方形。我們把這些可能蒐集到 $H$ 裡面。 一個 learning algorithm 就會從 $H$ 裡面找出某個特定的 $h\in H$,這個 $h$ 就是某個 $(p_1^h,p_2^h,e_1^h,e_2^h)$,去最大地逼近代表著 family car 的 class $C$。 > 在定義 $H$ 時,我們不知道到底哪一個 $h$,也就是「價格」和「引擎動力」要落在什麼樣的值裡面才能最接近「真正的 family car」,不過一但我們把關注的地方限縮到 Hypothesis Class $H$ 裡面,就能 reduce 到一個更簡單的 problem。 $\Rightarrow$ 因此,我們的目標就是: :::warning 找到某個最接近 $C$ 的 $h\in H$ ::: > 也就是說,given 一個特定的 training set,我們要找到上文中那四個 parameters ($p_1^h,p_2^h,e_1^h,e_2^h$)的值。 ![image](https://hackmd.io/_uploads/B1oedzLxC.png) > 這個 hypothesis $h$ 會去對某個 instance $x$ (某台車)做預測,使得它如果是 positive example (是 family car)就 output $1$,否則 output $0$。 - 因為在現實生活中<font color = "red">我們沒辦法知道 $C(x)$,所以我們沒辦法去評斷 $h(x)$ 和 $C(x)$ 到底有多相符</font>。我們有的只是 training set $X$,而 $X$ 只是「所有可能的 $x$ 所成的 set」 的 subset。 因為我們要找那四個 parameters 的值,所以我們要考慮所有的 $h$ (所有可能的灰色長方形),但是如果 $x_1$、$x_2$ 是實數,我們可以畫出無限多種長方形,這時候,因為要選出最好的那個 $h$,所以我們定義一個 <font color = "snake">empirical error</font>,也就是 ++training instances 裡面有多少 $h$ 做出的 prediction 和 $X$ 所給定的 required values 不相符++: ![image](https://hackmd.io/_uploads/SyxU3Tf8lR.png) > 意思就是一一檢視 training set 裡的每台車,如果某個 hypothesis 預測某台車是 family car,但實際上它被認為不是,那這個 hypothesis 的 error 值就 $+1$,反之如果預測正確,error 值就不變。 因為我們在挑這個 $h$ 時要求它這個灰色長方形必須包含所有的 positive examples 而不能包含任何的 negative example,所以我們要求 empirical error 必須是 $0$。 但是未來如果我們給另個例子(一台新的車),它可能在一個 positive examples 和 negative examples 邊界的位置,這樣一來我們的 candidate hypotheses 就可能給出不同的答案,這也就引入一個新的問題—— <font color = "snake">generalization</font>,也就是說我們的 ++hypothesis 在分類不屬於原來 training set 的 future examples 時,到底正確度有多高。++ 這個問題的有兩種極端的可能性: 1. most specific: $S$ 2. most general: $G$ 第一種就是去找那個(包含所有 positive 但不包含任何 negative example 的) tightest 的長方形,這樣求出來的 $h$ 我們令他 $= S$。 - 實際上的 $C$(代表 family car 的 class)可能比 $S$ 要大,但 $C$ 絕對不可能比 $S$ 小。 > 可能誤判有的車不是 fmaily car 但實際上它是,但不可能有車是 family car 但這個 hypothesis 預測它不是。 第二種就是去找一樣包含所有 positive 但不包含任何 negative example 的長方形,但這次找可以畫出來最大的那個。 ![image](https://hackmd.io/_uploads/rkNvf78gR.png) 所有介於 $S$ 和 $G$ 之間的 $h \in H$ 都是 valid hypothesis with no error,我們說這樣 training set 是 consistent(有解)的,而且如果蒐集所有這些 $h$,我們稱它為 <font color = "snake">version space</font> - 實際上,根據 training set $X$ 和 hypothesis class $H$ 的不同,有可能會有很多的 $S_i$ 和 $G_j$,這些 $S$ 和 這些 $G$ 分別構成 $S$-set 和 $G$-set $\rightarrow$ 所有 ==$S$-set== 裡的 $S_i$ 都是 consistent 的,而且不存在別的 hypothesis 更 specific 而且也是 consistent。 > 畫不出滿足條件,而且比 $S$-set 中的灰色長方形更小的長方形 Similarly, $\rightarrow$ 所有 ==$G$-set== 裡的 $G_j$ 都是 consistent 的,而且不存在別的 hypothesis 更 general 而且也是 consistent。 > 畫不出滿足條件,而且比 $G$-set 中的灰色長方形更大的長方形 $\Rightarrow$ $S$-set 和 $G$-set 構成 boundary sets,而且任何在它們之間的 hypothesis 都是 consistent 的,同時也是 version space 的一部分。 - 有一個 algorithm 叫做 candidate elimination,會在一個個檢查 training instances 時逐漸去更新 $S$-set 和 $G$-set。 - 我們 assume training set $X$ 大到使得我們能找到 unique 的 $S$ 和 $G$。 回到挑那個最接近 $C$ 的 hypothesis $h$,一個直觀的想法就是我們直接挑介於 $S$ 和 $G$ 中間的那個,如下圖: ![image](https://hackmd.io/_uploads/rkgDF78eC.png) 這樣一來,我們增加了 <font color = "snake">margin</font>,也就是和 boundary 的距離,最終我們要挑的是 ++boundary 最大且 error 最小++的 $h$。 因為我們要檢查的不只是每個 instance 有沒有在相對於 boundary 正確的那一側,我們還想知道++這個 instance 離 boundary 有多遠++,所以我們用另一個 error (loss) function > 不像原本的 $h(x)$ 只會傳回 $0/1$,我們要的是一個會回傳 distance to the boundary 的 function。 - 在某些應用裡面,一個 wrong decision 可能是非常 costly 的,所以如果有 instance 落在 $S$ 和 $G$ 之間,我們稱為 <font color = "snake">doubt</font>,我們沒辦法很確定的去 label 它,因為我們沒有足夠的 data。在這種情況下,system 會 reject 這個 instance 然後交給專家處理。 在此我們假設 $C$ 被包含在 $H$ 中,也就是說 hypothesis class $H$ 裡有某個 $h$ 使得 error $E(h|X)=0$ > 實際上有可能根本沒辦法 learn $C$,也就是我們找不到某個 $h\in H$ 使得這個 $h$ 的 error 是 $0$。 > > $\rightarrow$ 我們應該要確定 $H$ 是足夠 flexible 來讓我們 learn $C$ 的