# 4_SLearning [TOC] # Nearest Neighbor Classification ## Illustrating Classification Task ![](img from page 5) ## Instance-Based Classifiers * 利用training data來訓練模型並預測testing data的class ## Nearest Neighbor Classifiers 以最接近的class來預測testing的class * 如: 有個動物,叫聲像鴨子、走路像鴨子、游泳像鴨子,那我們就猜測這個動物為鴨子 需要三種資料才可以使用該分類法 1. 已經蒐集好的training data 2. 計算兩筆資料在特徵空間中距離的公式 3. k值,需要選擇的近距離的鄰居數目 為了找出未知的data,則我們需要這些資料: 1. 可以計算兩筆資料在特徵空間中距離的公式 2. 可以辨別k個nearest neightbors 3. 利用nearest neighbors的class label來判斷資料的class label 剛剛提到要計算兩點的距離,以下為公式 ![](img from page 12) 同時k值的選擇也是非常重要的 * 如果k太小的話,則如果不小心選到noise,則會造成很大的影響 * 如果k太大的話,又有可能會選到太遠不相關的neighbors 那我們有提到說neighbors是住在我們所畫出的範圍當中,則範圍的選擇也十分重要,必須剛剛好選擇適合的範圍 雖然看起來很不錯,但是也是有一些問題 1. 比較難無法計算高維資料之間的距離 2. 可能會計算出比較不像常理的結果,如下圖 ![](img from page 15) ### Definition 剛剛提過k是nearest neighbors,而x就是圈出k neigbors的半徑 又可以分為以下三種 ![](img from page 10) ### 優缺點 k-NN分類法可以說是最懶的方法了 XD * 因為不用特別訓練什麼模型 * 不需要特別麻煩,像是decision tree 但是當要找完全沒什麼線索的testing data就很麻煩 * 如果總共有n個點,則需要把n個點都探訪一次 ### 2 dimensions kd-Trees 要怎麼判斷如果是2維要怎麼決定先看x維還是y維 就看投影片可能會比較清楚,簡單來說就是可以畫樹決定 ![](img from page 23 left) ![](img from page 23 right) 因為是binary tree的架構所以: ![](img from page 25) # SVM 可參考暑假的筆記[這裡](https://hackmd.io/ZnQSQMJcSguSiGrc0mqs2w?view) 如果要把兩個class切割開來,那要怎樣才是好的切割呢? 我們已知在下圖中,B~1~和B~2~都可以切割,那我們又該選擇哪條線呢 ![](img from page 32) 通常我們會選擇margin最大的 ![](https://i.imgur.com/txjgbr6.png) * w