---
# System prepended metadata

title: K-Nearest Neighbors (KNN)
tags: [非監督式學習（Unsupervised learning）, 機器學習]

---

## 介紹 K-Nearest Neighbors (KNN)
K-Nearest Neighbors（KNN）是一種基於距離度量的監督式學習方法，適用於分類與回歸任務，KNN 是一種非參數方法，這意味著它不需要對數據做任何假設，而是依賴於訓練數據集來做決策。

KNN 的核心思想是，當需要對某個新數據點進行分類或回歸時，找到與其最接近的 K 個鄰居，並根據這些鄰居的標籤或數值來決定該數據點的類別或預測值，KNN 具有簡單直觀的優勢，但在高維數據或大規模數據時，計算成本較高。

## KNN Classifier
在分類問題中，有以下幾個步驟：
1. 選擇 K 值（通常根據交叉驗證來確定最佳 K）。
2. 計算新數據點與所有訓練數據點的距離，找出 K 個最接近的新數據點的鄰居
3. 多數決（Majority vote），如果 K 個鄰居中最多數據點屬於某個類別，則將新數據點歸類為該類別。

舉例來說，KNN 如果選擇 K=3，透過計算新數據點與資料集中所有樣本點的距離，來確定它的最近鄰居，並且 3 個鄰居中有 2 個屬於類別 B，而 1 個屬於類別 A，那麼新數據點將被分類為類別 B。

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

### 決定 k 值 -> 交叉驗證（Cross-validation）
K 值的選擇對於 KNN 的準確性至關重要，小的 K 值容易受到雜訊影響，導致過擬合，而較大的 K 值則可能使模型變得過於平滑，導致欠擬合，因此，常見做法是使用交叉驗證來選擇最合適的 K 值，透過不同的 K 值進行多次測試，選擇使測試誤差最小的 K 值。


### 距離計算方式
1. 歐幾里得距離（Euclidean Distance）：
$d(p, q) = \sqrt{\sum_{i=1}^{n} (p_i - q_i)^2}$
2. 曼哈頓距離（Manhattan Distance）：
$d(p, q) = \sum_{i=1}^{n} |p_i - q_i|$
![image](https://hackmd.io/_uploads/SJ3lWb7qye.png =50%x)

## KNN Regressor
在回歸問題中，KNN 回歸的步驟與分類類似：
1. 選擇 K 值。
2. 計算新數據點與所有訓練數據點的距離，找出 K 個最接近的新數據點的鄰居。
3. 根據這些鄰居的數值，計算加權平均值作為預測結果。
$\hat{y} = \frac{1}{K} \sum_{i=1}^{K} y_i$

## KNN 的優點

1. 簡單易於理解：
KNN 是一種基於距離的非參數模型，算法邏輯直觀簡單，不需要複雜的數學推導。
2. 無需訓練過程：
KNN 是懶惰學習（Lazy Learning）的代表，不需要顯式的模型訓練，所有計算都在預測階段完成，因此適合快速實現基線模型。
3. 適應性強：
不依賴數據分布假設，適用於任意形狀的決策邊界。

## KNN的缺點
1. 計算成本高：
預測時需要計算所有樣本點與目標點之間的距離，隨著數據集的增長，計算量會快速增加，導致運行速度變慢。
2. 對數據規模敏感：
如果數據集特別大且維度高，存儲和距離計算的成本會非常高。
3. 對特徵標準化敏感：
不同特徵的量級差異大時，歐幾里得距離（或其他距離度量）會偏向於主導特徵，因此需要對數據進行標準化或歸一化處理。

---
:::info
以上就是這篇文章「K-Nearest Neighbors (KNN)」的所有內容，第一次看的人會花比較多時間消化吸收，這是很正常的事情，若有任何問題，歡迎在下方與我聯繫、討論，接下來也會繼續分享相關文章，敬請期待。