iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
AI & Data

ML From Scratch系列 第 11

[Day 11] K nearest neighbors — 背後理論

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20230911/20152821KVpNrU1ri7.jpg

Prerequisite

https://chart.googleapis.com/chart?cht=tx&chl=k nearest neighbors (KNN) 採用向量空間模型來分類,具有相同類別的案例,彼此的相似度高,可以藉由計算與已知類別案例之相似度,來預測未知類別案例可能的分類。

Eigenvector / Eigenvalue

在線性代數中,對於一個方形矩陣 https://chart.googleapis.com/chart?cht=tx&chl=A,其特徵向量 (Eigenvector) https://chart.googleapis.com/chart?cht=tx&chl=v 經過線性轉換後,其得到的新向量與原先 https://chart.googleapis.com/chart?cht=tx&chl=v 保持同一直線上

https://chart.googleapis.com/chart?cht=tx&chl=Av%3D%5Clambda%20v,其中 https://chart.googleapis.com/chart?cht=tx&chl=%5Clambda 為純量,即特徵向量的長度在該線性轉換下縮放的比例,https://chart.googleapis.com/chart?cht=tx&chl=%5Clambda 也稱為特徵值 (Eigenvalue)

以下影片有更詳細介紹

Yes

Euclidean distance

歐幾里得空間中兩點之間的歐幾里得距離是指連接這兩點的線段的長度,歐幾里得空間可以被擴展來應用於任何有限維度,而這種空間叫做 https://chart.googleapis.com/chart?cht=tx&chl=n 維歐幾里得空間。

而如何計算歐幾里得距離,這裡先假設 https://chart.googleapis.com/chart?cht=tx&chl=n 維點,點 https://chart.googleapis.com/chart?cht=tx&chl=x%20%3D%20(x_1%2C%20%5Cdots%2C%20x_n)https://chart.googleapis.com/chart?cht=tx&chl=y%20%3D%20(y_1%2C%20%5Cdots%2C%20y_n),而其歐氏距離為

https://chart.googleapis.com/chart?cht=tx&chl=d(x%2C%20y)%20%3D%20%5Csqrt%7B(x_1%20-%20y_1)%5E2%20%2B%20(x_2%20-%20y_2)%5E2%20%2B%20%5Cdots%20%2B%20(x_n%20-%20y_n)%5E2%7D

Hamming distance

一般情況下,距離度量會使用歐氏距離,但是這只適用於連續變數。

在離散變數情況下,Hamming distance 可以用來作為度量。

兩個等長字符串之間的 Hamming distance 是兩個字符串對應位置的不同字符的個數。

Ex: 1011101 和 1001001 之間的 Hamming distance 是 2。

換句話說,它就是將一個字符串變換成另外一個字符串所需要替換的字符個數。

Goal

透過 KNN,我們可以藉由實例的學習,或者是局部近似和將所有計算推遲到分類之後。

Background

Algorithm

在訓練階段時,我們將每個範例加入到 Training list 中,範例可以 https://chart.googleapis.com/chart?cht=tx&chl=xhttps://chart.googleapis.com/chart?cht=tx&chl=x 的類別被表示

在進行分類任務時,我們可以觀察到所有 class https://chart.googleapis.com/chart?cht=tx&chl=Vhttps://chart.googleapis.com/chart?cht=tx&chl=V%20%3D%20%5C%7B%20v_1%2C%20%5Cdots%2C%20v_l%20%5C%7D

接著若我們要預測的範例 https://chart.googleapis.com/chart?cht=tx&chl=x_q 要被分類時,我們必須執行以下步驟:

  • 藉由超參數 https://chart.googleapis.com/chart?cht=tx&chl=k,我們將計算鄰近 https://chart.googleapis.com/chart?cht=tx&chl=k 個範例中,所有 https://chart.googleapis.com/chart?cht=tx&chl=X%20%3D%20%5C%7B%20x_1%2C%20%5Cdots%2C%20x_k%20%5C%7D 跟其接近的範例
  • 根據這 https://chart.googleapis.com/chart?cht=tx&chl=k 個範例,我們會以投票的方式給予這 https://chart.googleapis.com/chart?cht=tx&chl=%5Cforall%20i%20%3A%201%2C%20%5Cdots%2C%20l 的類別投票,https://chart.googleapis.com/chart?cht=tx&chl=vote%20%3D%20%5C%7B%20x%20%5Cin%20X%20%5Cmid%20class(x)%20%3D%20v_i%20%5C%7D
  • 回傳最多票的類別 https://chart.googleapis.com/chart?cht=tx&chl=v_i

如何取 https://chart.googleapis.com/chart?cht=tx&chl=k ?
如何選擇一個最佳的 https://chart.googleapis.com/chart?cht=tx&chl=k 值取決於資料。
一般情況下,在分類時較大的 https://chart.googleapis.com/chart?cht=tx&chl=k 值能夠減小雜訊的影響,但會使類別之間的界限變得模糊。
在二元(兩類)分類問題中,選取 https://chart.googleapis.com/chart?cht=tx&chl=k 為奇數有助於避免兩個分類平票的情形。

改進現有 KNN

距離加權 KNN

對於每個範例,我們給予它一個權重 https://chart.googleapis.com/chart?cht=tx&chl=w_%7Bni%7D,其中 https://chart.googleapis.com/chart?cht=tx&chl=%5Csum_%7Bi%3D1%7D%5En%20w_%7Bni%7D%20%3D%201

最常見的方法是使用距離的倒數作為權重,即 https://chart.googleapis.com/chart?cht=tx&chl=w_%7Bni%7D%20%3D%20%5Cfrac%7B1%7D%7B%7Bd_i%7D%7D,其中 https://chart.googleapis.com/chart?cht=tx&chl=d_i 是第 https://chart.googleapis.com/chart?cht=tx&chl=i 個最近鄰的距離。

距離加權 KNN 是 KNN 的一個強大變體,可以更好地處理不同鄰居對預測的貢獻,並在某些情況下提高模型的性能。

但它也需要謹慎的調參和權重計算來實現最佳結果。


/images/emoticon/emoticon18.gif

下次就會進入到 KNN 實做的部份 ~

Reference

歡迎更仔細閱讀以下相關內容以了解本篇知識


上一篇
[Day 10] Support Vector Machine — 解決真實問題
下一篇
[Day 12] K nearest neighbors — 主題實作
系列文
ML From Scratch31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言