【機器學習基礎】機器學習入門核心算法:K-近鄰算法(K-Nearest Neighbors, KNN)

在這里插入圖片描述

機器學習入門核心算法:K-近鄰算法(K-Nearest Neighbors, KNN)

  • 一、算法邏輯
      • 1.1 基本概念
      • 1.2 關鍵要素
        • 距離度量
        • K值選擇
  • 二、算法原理與數學推導
      • 2.1 分類任務
      • 2.2 回歸任務
      • 2.3 時間復雜度分析
  • 三、模型評估
      • 3.1 評估指標
      • 3.2 交叉驗證調參
  • 四、應用案例
      • 4.1 手寫數字識別
      • 4.2 推薦系統
  • 五、經典面試題
      • 問題1:KNN的主要優缺點?
      • 問題2:如何處理高維數據?
      • 問題3:KNN與K-Means的區別?
  • 六、高級優化技術
      • 6.1 數據結構優化
      • 6.2 近似最近鄰(ANN)
  • 七、最佳實踐指南
      • 7.1 參數調優建議
      • 7.2 特征處理要點
  • 總結與展望

一、算法邏輯

1.1 基本概念

K-近鄰算法(KNN)是一種基于實例的監督學習算法,其核心思想是**“物以類聚”**。算法特點包括:

  • 懶惰學習(Lazy Learning):沒有顯式的訓練過程,直接存儲全部訓練數據
  • 非參數化:不假設數據分布形式
  • 局部近似:僅依賴鄰近樣本進行預測

工作原理
給定新樣本時,在訓練集中查找距離最近的K個樣本,通過這K個鄰居的標簽進行多數表決(分類)或均值計算(回歸)。

1.2 關鍵要素

距離度量

常用距離計算公式:

  1. 歐氏距離(默認選擇):
    d ( x i , x j ) = ∑ k = 1 n ( x i k ? x j k ) 2 d(\boldsymbol{x}_i, \boldsymbol{x}_j) = \sqrt{\sum_{k=1}^n (x_{ik} - x_{jk})^2} d(xi?,xj?)=k=1n?(xik??xjk?)2 ?
  2. 曼哈頓距離
    d ( x i , x j ) = ∑ k = 1 n ∣ x i k ? x j k ∣ d(\boldsymbol{x}_i, \boldsymbol{x}_j) = \sum_{k=1}^n |x_{ik} - x_{jk}| d(xi?,xj?)=k=1n?xik??xjk?
  3. 閔可夫斯基距離(通用形式):
    d ( x i , x j ) = ( ∑ k = 1 n ∣ x i k ? x j k ∣ p ) 1 / p d(\boldsymbol{x}_i, \boldsymbol{x}_j) = \left( \sum_{k=1}^n |x_{ik} - x_{jk}|^p \right)^{1/p} d(xi?,xj?)=(k=1n?xik??xjk?p)1/p
K值選擇
  • K=1:最近鄰算法,決策邊界不規則,容易過擬合
  • K過大:決策邊界平滑,可能欠擬合

二、算法原理與數學推導

2.1 分類任務

多數表決規則
y ^ = arg ? max ? c ∑ x i ∈ N k ( x ) I ( y i = c ) \hat{y} = \arg\max_{c} \sum_{\boldsymbol{x}_i \in N_k(\boldsymbol{x})} I(y_i = c) y^?=argcmax?xi?Nk?(x)?I(yi?=c)
其中:

  • N k ( x ) N_k(\boldsymbol{x}) Nk?(x):樣本 x \boldsymbol{x} x的K個最近鄰
  • I ( ? ) I(\cdot) I(?):指示函數,條件滿足時取1否則0

加權投票改進
y ^ = arg ? max ? c ∑ x i ∈ N k ( x ) w i I ( y i = c ) \hat{y} = \arg\max_{c} \sum_{\boldsymbol{x}_i \in N_k(\boldsymbol{x})} w_i I(y_i = c) y^?=argcmax?xi?Nk?(x)?wi?I(yi?=c)
權重計算:
w i = 1 d ( x , x i ) + ? w_i = \frac{1}{d(\boldsymbol{x}, \boldsymbol{x}_i) + \epsilon} wi?=d(x,xi?)+?1?
? \epsilon ?為防止除零的小常數)

2.2 回歸任務

均值預測
y ^ = 1 k ∑ x i ∈ N k ( x ) y i \hat{y} = \frac{1}{k} \sum_{\boldsymbol{x}_i \in N_k(\boldsymbol{x})} y_i y^?=k1?xi?Nk?(x)?yi?

加權回歸
y ^ = ∑ x i ∈ N k ( x ) w i y i ∑ w i \hat{y} = \frac{\sum_{\boldsymbol{x}_i \in N_k(\boldsymbol{x})} w_i y_i}{\sum w_i} y^?=wi?xi?Nk?(x)?wi?yi??

2.3 時間復雜度分析

階段時間復雜度說明
訓練階段O(1)僅存儲數據
預測階段O(nd + nlogk)d為維度,n為樣本數
優化后O(mlog n)使用KD樹/球樹結構

三、模型評估

3.1 評估指標

任務類型常用指標公式
分類準確率、F1 Score A c c u r a c y = T P + T N N Accuracy = \frac{TP+TN}{N} Accuracy=NTP+TN?
回歸MSE、MAE M S E = 1 n ∑ ( y i ? y ^ i ) 2 MSE = \frac{1}{n}\sum(y_i-\hat{y}_i)^2 MSE=n1?(yi??y^?i?)2

3.2 交叉驗證調參

K值選擇方法

  1. 肘部法則(Elbow Method):繪制不同K值的誤差曲線
  2. 網格搜索:結合交叉驗證選擇最優K值

代碼示例

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCVparams = {'n_neighbors': [3,5,7,9], 'weights': ['uniform', 'distance']}
grid = GridSearchCV(KNeighborsClassifier(), params, cv=5)
grid.fit(X_train, y_train)

四、應用案例

4.1 手寫數字識別

數據集:MNIST(60,000張28x28灰度圖)
關鍵步驟

  1. 數據標準化:像素值縮放到[0,1]
  2. 降維處理:使用PCA保留95%方差
  3. 模型配置:K=5,加權距離

性能表現

  • 測試集準確率:97.1%
  • 推理速度:200樣本/秒(使用KD樹加速)

4.2 推薦系統

應用場景:電影推薦
特征工程

  • 用戶評分矩陣
  • 電影類型標簽(One-Hot編碼)
  • 用戶行為時序特征

相似度計算
Similarity ( u , v ) = ∑ i ∈ I u v ( r u i ? r ˉ u ) ( r v i ? r ˉ v ) ∑ i ∈ I u v ( r u i ? r ˉ u ) 2 ∑ i ∈ I u v ( r v i ? r ˉ v ) 2 \text{Similarity}(u,v) = \frac{\sum_{i \in I_{uv}}(r_{ui} - \bar{r}_u)(r_{vi} - \bar{r}_v)}{\sqrt{\sum_{i \in I_{uv}}(r_{ui} - \bar{r}_u)^2} \sqrt{\sum_{i \in I_{uv}}(r_{vi} - \bar{r}_v)^2}} Similarity(u,v)=iIuv??(rui??rˉu?)2 ?iIuv??(rvi??rˉv?)2 ?iIuv??(rui??rˉu?)(rvi??rˉv?)?

推薦流程

  1. 查找最相似K個用戶
  2. 聚合這些用戶的高評分電影
  3. 過濾已觀看內容生成推薦列表

五、經典面試題

問題1:KNN的主要優缺點?

優點分析

  • 原理直觀,實現簡單
  • 無需訓練階段,適合動態數據集
  • 天然支持多分類任務

缺點分析

  • 計算復雜度高(預測階段需全量計算)
  • 對高維數據敏感(維度災難)
  • 需要特征標準化處理

問題2:如何處理高維數據?

解決方案

  1. 特征選擇:使用互信息、卡方檢驗等方法篩選重要特征
  2. 降維技術:PCA、t-SNE等
  3. 距離度量改進:使用余弦相似度替代歐氏距離
  4. 數據標準化:Min-Max或Z-Score標準化

問題3:KNN與K-Means的區別?

本質區別對比

維度KNNK-Means
算法類型監督學習無監督聚類
目標分類/回歸數據分組
距離計算測試樣本與所有訓練樣本計算樣本與聚類中心計算
K值含義最近鄰數量聚類中心數量

六、高級優化技術

6.1 數據結構優化

KD樹構建

  1. 選擇方差最大的維度進行劃分
  2. 以中位數作為切分點
  3. 遞歸構建左右子樹

球樹(Ball Tree)

  • 將數據點組織成嵌套超球體
  • 適合高維數據,比KD樹更高效

6.2 近似最近鄰(ANN)

大規模數據加速方法

  1. 位置敏感哈希(LSH):通過哈希函數將相似數據映射到相同桶
  2. 層次導航小世界(HNSW):基于圖結構的快速檢索
  3. 乘積量化(PQ):將高維向量分解為子空間量化

七、最佳實踐指南

7.1 參數調優建議

參數推薦值作用說明
n_neighbors3-15(奇數為佳)控制模型復雜度
weightsdistance加權近鄰投票
algorithmauto自動選擇最優數據結構
leaf_size30-50控制樹結構的存儲效率

7.2 特征處理要點

  • 標準化:必須對數值特征進行標準化
  • 類別特征:使用嵌入(Embedding)代替One-Hot
  • 缺失值:使用KNNImputer進行填充

總結與展望

KNN算法憑借其簡單直觀的特性,在模式識別、推薦系統等領域持續發揮重要作用。未來發展方向包括:

  1. 分布式計算:使用Spark MLlib加速大規模KNN
  2. 深度學習結合:用神經網絡學習更好的距離度量
  3. 硬件加速:利用GPU實現實時KNN計算

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82575.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82575.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在h5端實現錄音發送功能(兼容內嵌微信小程序) recorder-core

本文將通過一個實際的 Vue3 組件示例,帶你一步步實現“按住錄音,松開發送,上滑取消”的語音錄制功能。 我們將使用強大且小巧的開源庫 recorder-core,支持 MP3、WAV、AAC 等編碼格式,兼容性較好。 🔧 項目…

深入掌握Node.js HTTP模塊:從開始到放棄

文章目錄 一、HTTP模塊入門:從零搭建第一個服務器1.1 基礎概念解析1.2 手把手創建服務器 二、核心功能深入解析2.1 處理不同請求類型2.2 實現文件下載功能 三、常見問題解決方案3.1 跨域問題處理3.2 防止服務崩潰3.3 調試技巧 四、安全最佳實踐4.1 請求頭安全設置4.…

SSM整合:Spring+SpringMVC+MyBatis完美融合實戰指南

前言 在Java企業級開發領域,SSM(SpringSpringMVCMyBatis)框架組合一直占據著重要地位。這三個輕量級框架各司其職又相互配合,為開發者提供了高效、靈活的開發體驗。本文將深入探討SSM框架的整合過程,揭示整合背后的原…

[AI]大模型MCP快速入門及智能體執行模式介紹

[AI]大模型MCP快速入門及智能體執行模式介紹 一、MCP入門 介紹 MCP(Model Context Protocol,模型上下文協議)是一種由Anthropic公司于2024年提出的開放標準協議,旨在為大型語言模型(LLM)提供統一接口&am…

Mac M1 安裝 ffmpeg

1.前言 官網那貨沒有準備m系列的靜態包,然后我呢,不知道怎么想的就從maven項目中的 javacv-platform,且版本為1.5.11依賴里面將這個靜態包把了出來,親測能用,感覺比那些網上說的用什么wget編譯安裝、brew安裝快多了。…

unity控制相機圍繞物體旋轉移動

記錄一下控制相機圍繞物體旋轉與移動的腳本,相機操作思路分為兩塊,一部分為旋轉,一部分為移動,旋轉是根據當前center中心點的坐標,根據距離設置與默認的旋轉進行位置移動,移動是根據相機的左右和前后進行計…

python打卡day38@浙大疏錦行

知識點回顧: Dataset類的__getitem__和__len__方法(本質是python的特殊方法)Dataloader類minist手寫數據集的了解 作業:了解下cifar數據集,嘗試獲取其中一張圖片 一、首先加載CIFAR數據集 import torch import torchvi…

用戶配置文件(Profile)

2.4.5 用戶配置文件(Profile) 用戶配置文件由以下組件構成: 一個運營商安全域(MNO-SD) 輔助安全域(SSD)和CASD Applets 應用程序(如NFC應用) 網絡接入應用&#xff…

如何給自研MCP加上安全驗證

前言 剛過去兩個月,市面的 MCP 服務,如雨后春筍一般不斷涌現出來,包括;百度、高德、網盤、支付寶。這些 MCP 服務,可以讓我們基于 Spring AI 框架構建的 Agent 具備非常豐富的使用功能。同時這也說明,程序員???????,應該具備開發 MCP 服務的能力,Spring AI 讓 J…

Unity網絡開發實踐項目

摘要:該網絡通信系統基于Unity實現,包含以下幾個核心模塊: 協議配置:通過XML定義枚舉(如玩家/英雄類型)、數據結構(如PlayerData)及消息協議(如PlayerMsg)&a…

OpenCV CUDA模塊圖像過濾------創建一個 Sobel 濾波器函數createSobelFilter()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 該函數用于創建一個 Sobel 濾波器,用于在 GPU 上進行邊緣檢測。它基于圖像的梯度計算: dx 表示對 x 方向求導的階數&…

【JavaSE】枚舉和注解學習筆記

枚舉和注解 -枚舉 規定多選一數據類型的解決方案-枚舉 枚舉對應英文(enumeration,簡寫 enum) 2)枚舉是一組常量的集合。 3)可以這里理解:枚舉屬于一種特殊的類,里面只包含一組有限的特定的對象。 枚舉的兩種實現方式 自定義實現枚舉 使用enum關鍵字實現枚舉 自…

Spark SQL進階:解鎖大數據處理的新姿勢

目錄 一、Spark SQL,為何進階? 二、進階特性深剖析 2.1 窗口函數:數據洞察的新視角 2.2 高級聚合:挖掘數據深度價值 2.3 自定義函數(UDF 和 UDTF):拓展功能邊界 三、性能優化實戰 3.1 數…

如何利用 Conda 安裝 Pytorch 教程 ?

如何利用 Conda 安裝 Pytorch 教程 ? 總共分為六步走: (1)第一步:驗證conda 環境是否安裝好? 1) conda -V2) conda --version(2)第二步:查看現有環境 conda env list…

什么是HTTP

HTTP(HyperText Transfer Protocol)是萬維網數據通信的基礎協議,作為應用層協議具有以下關鍵特性: 客戶端-服務器模型:基于請求/響應模式 無狀態協議:默認不保留通信狀態 可擴展性:通過首部字…

2025-05-27 學習記錄--Python-模塊

合抱之木,生于毫末;九層之臺,起于累土;千里之行,始于足下。💪🏻 一、模塊 ?? (一)模塊的導入與使用 🍭 模塊的導入:🐝 模塊 就好比…

leetcode 131. Palindrome Partitioning

目錄 一、題目描述 二、方法1、回溯法每次暴力判斷回文子串 三、方法2、動態規劃回溯法 一、題目描述 分割回文子串 131. Palindrome Partitioning 二、方法1、回溯法每次暴力判斷回文子串 class Solution {vector<vector<string>> res;vector<string>…

重構開發范式!飛算JavaAI革新Spring Cloud分布式系統開發

分布式系統憑借高可用性、可擴展性等核心優勢&#xff0c;成為大型軟件項目的標配架構。Spring Cloud作為Java生態最主流的分布式開發框架&#xff0c;雖被廣泛應用于微服務架構搭建&#xff0c;但其傳統開發模式卻面臨效率瓶頸——從服務注冊中心配置到網關路由規則編寫&#…

python 生成復雜表格,自動分頁等功能

py&#xff54;&#xff48;&#xff4f;&#xff4e; 生成復雜表格&#xff0c;自動分頁等功能 解決將Python中的樹形目錄數據轉換為Word表格&#xff0c;并生成帶有合并單元格的檢測報告的問題。首先&#xff0c;要解決“tree目錄數據”和“Word表格互換”&#xff0c;指將樹…

根據Cortex-M3(包括STM32F1)權威指南講解MCU內存架構與如何查看編譯器生成的地址具體位置

首先我們先查看官方對于Cortex-M3預定義的存儲器映射 1.存儲器映射 1.1 Cortex-M3架構的存儲器結構 內部私有外設總線&#xff1a;即AHB總線&#xff0c;包括NVIC中斷&#xff0c;ITM硬件調試&#xff0c;FPB, DWT。 外部私有外設總線&#xff1a;即APB總線&#xff0c;用于…