搜尋意圖: 如果你在找「K 近鄰演算法 是什麼」或「K 近鄰演算法 和相近概念差在哪」,先看這頁的短定義、完整說明與延伸比較。
TL;DR: K 近鄰演算法(K-Nearest Neighbors, KNN)是一種非參數式監督學習演算法,透過尋找訓練集中距離最近的 K 個樣本進行多數投票(分類)或加權平均(回歸),無需建立顯式的模型參數。
實用情境: 適合用在閱讀 AI 文章、產品文件或和同事討論時,先用一頁快速對齊概念。
下一步: 先讀完定義,再往下看延伸比較與對應工具,把概念轉成實際應用。
K 近鄰演算法(K-Nearest Neighbors, KNN)是一種非參數式監督學習演算法,透過尋找訓練集中距離最近的 K 個樣本進行多數投票(分類)或加權平均(回歸),無需建立顯式的模型參數。
核心概念
KNN 基於一個簡單的幾何直覺:在特徵空間中,相近的資料點往往屬於同一類別或具有相似的數值。演算法的核心思想是「讓訓練資料自己說話」,預測時不依賴學習到的模型參數,而是直接查找最相似的訓練樣本。
KNN 屬於非參數方法(Non-parametric Method),不對資料分布做任何假設,也不學習顯式的決策邊界。同時也是懶惰學習(Lazy Learning)方法,訓練階段幾乎不做計算,代價是推論階段需要遍歷全部訓練資料。
運作原理
距離度量
KNN 的核心操作是計算查詢點與訓練集中每個點的距離。常用距離度量包括:
- 歐氏距離(Euclidean Distance):最常用,適合連續數值特徵
- 曼哈頓距離(Manhattan Distance):在高維空間或稀疏特徵時較穩健
- 餘弦相似度(Cosine Similarity):適合文字向量等方向比大小更重要的場景
- 漢明距離(Hamming Distance):適合類別型或二元特徵
K 值的作用
K 是 KNN 中最重要的超參數:
- K = 1:決策邊界最曲折,對雜訊最敏感,容易過擬合
- K 較大:決策邊界更平滑,偏差增加,方差減少(類似正則化效果)
- K = N(全部訓練樣本):退化為直接預測訓練集的多數類別,欠擬合
通常透過交叉驗證選擇最佳 K,K 為奇數可避免二分類時的平票問題。
分類與回歸
分類:K 個近鄰中,出現最多的類別標籤即為預測結果(多數投票)。可採用加權投票,距離較近的鄰居具有較高權重。
回歸:取 K 個近鄰的目標值平均值(或加權平均)作為預測輸出。
計算效率問題
樸素 KNN 的預測時間複雜度為 O(n × d)(n 為訓練樣本數,d 為特徵維度),在大規模資料集上效率低落。實務上常使用:
- KD-Tree:在低維空間(d < 20)能加速近鄰搜尋至 O(log n)
- Ball Tree:對高維資料優於 KD-Tree
- 近似近鄰搜尋(ANN):如 FAISS、HNSW,以少量精度損失換取大幅速度提升,廣泛用於向量資料庫和推薦系統
實際應用
推薦系統
協作過濾(Collaborative Filtering)的核心即 KNN 思想:找到與目標用戶最相似的 K 個用戶,推薦他們喜歡但目標用戶尚未接觸的項目。用戶間的相似度通常以消費記錄的餘弦相似度衡量。
醫療診斷
KNN 用於根據患者的症狀和檢測指標,在歷史病例中尋找最相似的案例輔助診斷。由於 KNN 直觀可解釋(「根據 5 個最相似患者的病例判斷」),在醫療場景的可信度較高。
向量資料庫
大型語言模型的檢索增強生成(RAG)架構依賴向量資料庫進行語意搜尋,其核心操作本質上是近似 K 近鄰搜尋(ANN):將查詢轉為嵌入向量,在向量庫中找出語意最相似的 K 個文件片段。
異常偵測
若一個新資料點與 K 個最近鄰的距離都很大,代表它與訓練資料中任何已知模式都不相似,可被視為異常點。這種方式稱為基於距離的異常偵測。
常見誤區
誤區一:KNN 不需要特徵縮放
KNN 基於距離計算,對特徵量綱極為敏感。若特徵 A 的取值範圍為 [0, 1000],特徵 B 的取值範圍為 [0, 1],距離將幾乎完全由特徵 A 主導。MUST 在使用 KNN 前進行 Min-Max 正規化或 Z-score 標準化。
誤區二:K 越大效果越好
K 值增大能降低過擬合風險,但同時增加偏差。K 太大時,決策邊界過於平滑,模型喪失對局部結構的感知能力。最佳 K 值應透過驗證集或交叉驗證確定,而非直接設大。
誤區三:KNN 無法處理高維資料
維度詛咒(Curse of Dimensionality)確實使 KNN 在高維空間中效果下降,但透過先進行降維(PCA、UMAP)或採用近似近鄰搜尋(ANN)結合適當距離度量,KNN 在高維嵌入空間(如文字嵌入)仍有廣泛應用。
與相關技術的比較
| 方法 | 訓練時間 | 預測時間 | 可解釋性 | 高維效能 | 適用規模 |
|---|---|---|---|---|---|
| KNN | O(1) | O(n×d) | 高(近鄰可視化) | 差 | 小至中型資料集 |
| SVM | O(n²~n³) | O(sv×d) | 中(支援向量) | 好(核函數) | 中型資料集 |
| 決策樹 | O(n×d×log n) | O(depth) | 高(規則路徑) | 中 | 各種規模 |
| 神經網路 | 高 | O(d×層數) | 低 | 好 | 大型資料集 |
| ANN(近似) | O(n log n) | O(log n) | 低 | 好 | 大規模向量搜尋 |
常見問題
KNN 的 K 值要如何選擇?
K 值選擇需在過擬合(K 太小)和欠擬合(K 太大)之間取得平衡。實務流程:先用 K = sqrt(n)(n 為訓練樣本數)作為起始點,再透過 k-fold 交叉驗證在候選 K 值清單(如 1, 3, 5, 7, 11, 15 等奇數)中搜尋驗證集上準確率最高的值。二分類問題建議選奇數 K 避免平票。若資料有明顯雜訊,K 應偏大;若類別邊界複雜,K 應偏小。最終選擇時,若兩個 K 值準確率相近,選較大的以獲得更穩健的預測。
KNN 與向量資料庫的關係是什麼?
現代向量資料庫(如 Pinecone、Weaviate、pgvector)的核心功能是高效的近似 K 近鄰搜尋(Approximate Nearest Neighbor, ANN),本質上是 KNN 的大規模工程實現。在 RAG(檢索增強生成)架構中,將使用者查詢轉換為嵌入向量後,向量資料庫負責找出語意最相近的 K 個文件片段,這個過程即為 KNN 搜尋。主要差異在於:傳統 KNN 追求精確近鄰,而 ANN 以犧牲少量精度換取極大的速度提升,使得在億級向量庫中的毫秒級搜尋成為可能。
iPAS 考題中 KNN 的常見考點有哪些?
iPAS 考題中 KNN 常從四個角度出題:一是懶惰學習特性(訓練快、預測慢、記憶體占用大);二是超參數 K 對偏差-方差的影響(K 小 = 高方差低偏差、K 大 = 低方差高偏差);三是特徵縮放的必要性(KNN 基於距離,未縮放的特徵會主導結果);四是維度詛咒(高維空間中所有點距離趨於相近,KNN 效果下降)。考生應能辨別 KNN 屬於非參數、監督學習、懶惰學習方法,並與 SVM、決策樹等其他分類演算法比較訓練/預測效能特性。