機器學習算法——KNN

一、KNN算法簡介

1.KNN思想

(1)K-近鄰算法

  • 根據你的“鄰居”來推斷你是什么類別

  • KNN算法思想:如果一個樣本在特征空間(訓練集)中的k個最相似的樣本中的大多數屬于某一個類別。則該樣本也屬于這個類別

(2)樣本相似性

  • 樣本都是屬于一個任務數據集的,樣本距離越近則越相似

  • 計算樣本距離

    • 歐氏距離: ∑ i = 1 n ( x i ? y i ) 2 \sqrt{\sum_{i=1}^n(x_i-y_i)^2} i=1n?(xi??yi?)2 ?

(3)分類問題處理流程

  • 距離計算: 使用歐氏距離計算未知樣本到每個訓練樣本的距離
  • 排序規則: 將所有訓練樣本按距離從小到大排序
  • K值選擇: 選取距離最近的K個樣本(K值由程序員預先設定)
  • 表決機制: 統計K個樣本中多數類別,將該類別作為未知樣本的預測結果

(4)回歸問題處理流程

  • 距離計算: 使用歐氏距離計算未知樣本到每個訓練樣本的距離
  • 排序規則: 將所有訓練樣本按距離從小到大排序
  • K值選擇: 選取距離最近的K個樣本(K值由程序員預先設定)
  • 表決機制: 對K個樣本的標簽值(目標值)取平均值,作為未知樣本預測的值

(5)K值設置

a. K值過小
  • 異常值敏感:當K=1時,若最近鄰是異常值,預測結果會完全錯誤
  • 模型復雜度:K值減小會使模型變復雜,容易發生過擬合
  • 學習偏差:會學到訓練集中不該學的噪聲特征,如當K=1時可能錯誤學習異常點的特征
b. K值過大
  • 樣本均衡問題:當K=N(訓練樣本總數)時,預測結果總是訓練集中最多的類別
  • 模型簡化:K值增大會使模型變得過于簡單,導致欠擬合
c. K值選擇的經驗法則
  • 二分類問題:避免選擇2的倍數(如2、4等)
  • 三分類問題:避免選擇3的倍數(如3、6等)
  • 五分類問題:避免選擇5的倍數
d. K值調優方法

交叉驗證網格搜索

  • 通用方法:適用于所有算法的超參數調優
  • 實現方式:通過交叉驗證評估不同K值表現,網格搜索尋找最優參數
  • 注意事項:調優過程需考慮計算成本與模型性能的平衡

二、KNN算法API

1.KNN分類API

# 1.工具包
from sklearn.neighbors import KNeighborsClassifier# 2.數據(特征處理)
x = [[0],[1],[2],[3],[4]]
y = [0,0,1,1,1]# 3.實例化
model = KNeighborsClassifier(n_neighbors=3) # 二分類,避免設置成2的倍數# 4.訓練
model.fit(x,y)# 5.預測
print(model.predict([[5]])) # 輸出[1]
  • 多維特征處理

    • 特征可以是任意維度,如三維特征:  X = [ [ 0 , 2 , 3 ] , [ 1 , 3 , 4 ] , [ 3 , 5 , 6 ] ] X=[[0,2,3],[1,3,4],[3,5,6]] X=[[0,2,3],[1,3,4],[3,5,6]]
    • 預測時輸入特征維度必須與訓練數據一致
  • 變量命名:

    • 模型實例可命名為estimator或model
    • 預測結果通常保存到變量如myret
  • 注意事項

    • 分類和回歸使用不同API,不能混用
    • 輸入數據必須是二維數組格式,即使單個樣本也要用雙層括號
    • 特征工程可以插入在數據準備和模型訓練之間
    • 預測結果打印使用print函數查看

2.KNN回歸API

# 1.工具包
from sklearn.neighbors import KNeighborsRegressor# 2.數據(特征工程)
x = [[0],[1],[2],[3]]
y = [0.1,0.2,0.3,0.4]  # 目標值是連續的# 3.實例化
model = KNeighborRegressor(n_neighbors=3)# 4.訓練
model.fit(x,y)# 5.預測
print(model.predict([[5]])) # 輸出[0.3]

三、距離度量

1.歐氏距離

∑ i = 1 n ( x i ? y i ) 2 \sqrt{\sum_{i=1}^n(x_i-y_i)^2} i=1n?(xi??yi?)2 ?

2.曼哈頓距離

  • 別稱:城市街區距離(City Block distance)
  • 幾何意義:在橫平豎直的街區道路中,從一個點到另一個點需要行走的最短路徑長度
  • 二維公式:點 a ( x 1 , y 1 ) a(x1,y1) a(x1,y1) b ( x 2 , y 2 ) b(x2,y2) b(x2,y2)間距離為 d 12 = ∣ x 1 ? x 2 ∣ + ∣ y 1 ? y 2 ∣ d_{12}=|x_1-x_2|+|y_1-y_2| d12?=x1??x2?+y1??y2?
  • n維公式: d = ∑ n ∣ x i ? x j ∣ d=\sum^n|x_i-x_j| d=nxi??xj?
  • 計算原理:對應坐標相減取絕對值后求和

3.切比雪夫距離

  • 計算公式: 二維平面兩點 a ( x 1 , y 1 ) a(x_1,y_1) a(x1?,y1?) b ( x 2 , y 2 ) b(x_2,y_2) b(x2?,y2?)間的切比雪夫距離為

    d 12 = max ? ( ∣ x 1 ? x 2 ∣ , ∣ y 1 ? y 2 ∣ ) d_{12} = \max(|x_1 - x_2|, |y_1 - y_2|) d12?=max(x1??x2?,y1??y2?)

  • 移動特性: 相比只能沿 x y xy xy方向走的曼哈頓距離,切比雪夫距離允許沿45度對角線方向移動,這是其核心改變。

4.閔可夫斯基距離

    • 統一形式:可將歐氏距離和曼哈頓距離統一為閔可夫斯基距離

      d 12 = ∑ k = 1 n ∣ x 1 k ? x 2 k ∣ p p d_{12} = \sqrt[p]{\sum_{k=1}^n |x_{1k}-x_{2k}|^p} d12?=pk=1n?x1k??x2k?p ?

    • 參數關系:

      • p = 1 p=1 p=1時為曼哈頓距離
      • p = 2 p=2 p=2時為歐氏距離
      • p → ∞ p\to\infty p時為切比雪夫距離

5.其他距離

余弦距離、馬式距離(不通用)

四、特征預處理

1.原因

當特征的單位或大小相差較大,或某特征的方差比其他特征大出幾個數量級時,會影響(支配)目標結果,使模型無法有效學習其他特征。

2.歸一化

  • 定義:將原始數據通過線性變換映射到指定范圍(默認[0,1])的方法。

  • 基本公式: ? X ′ = x ? min ? max ? ? min ? ?X^{\prime} = \frac{x - \min}{\max - \min} ?X=max?minx?min?

  • 擴展公式:若需映射到 [ m i , m x ] [mi,mx] [mi,mx]范圍,則

    X ′ ′ = X ′ ? ( m x ? m i ) + m i X^{\prime\prime} = X^{\prime} * (mx - mi) + mi X′′=X?(mx?mi)+mi

  • 特點與適用場景

    • 異常值敏感:受最大值最小值影響大,若存在異常值(如年齡特征出現200歲)會顯著影響歸一化結果。
    • 適用場景:適合取值范圍固定且無異常值的數據(如圖像像素值固定為0-255)。
    • 不適用場景:不適合大規模數據或存在異常值的情況。
  • API

# 1.導入工具包
from sklearn.preprocessing import MinMaxScaler# 2.數據(只有特征)
x = [[90,2,10,40],[60,4,15,45],[75,3,13,46]]# 3.實例化
process = MinMaxScaler()# 4.fit_transform處理
data = process.fit_transform(x)

3.標準化

  • 通過對原始數據進行標準化,轉換為均值為0,標準差為1的標準正態分布的數據

  • 公式: x ′ = x ? m e a n σ x^{\prime}=\frac{x-mean}{\sigma} x=σx?mean? σ 為特征的標準差 \sigma為特征的標準差 σ為特征的標準差

  • 少量的異常值對于平均值的形象并不大,魯棒性更強,優先選擇

  • API

# 1.導入工具包
from sklearn.preprocessing import StandardScaler# 2.數據(只有特征)
x = [[90,2,10,40],[60,4,15,45],[75,3,13,46]]# 3.實例化
process = StandardScaler()# 4.fit_transform處理
data = process.fit_transform(x)print(data)
print(process.mean_)
print(process.var_)

五、超參數選擇

1.交叉驗證

  • 核心思想: 將訓練集劃分為n份,每次取1份作為驗證集,其余n-1份作為訓練集,循環n次
  • 驗證集作用: 與測試集功能相同,用于評估模型效果
  • 折數命名: 根據劃分份數稱為n折交叉驗證(如4份即四折交叉驗證)
  • 評估方式: 取多次驗證結果的平均值作為最終模型評分,比單次劃分更可靠

2.網格搜索

  • 產生背景: 模型存在多個需人工設置的超參數(如KNN的k值),不同參數組合效果差異大
  • 工作原理:
    • 預設參數候選值(如k=3,4,5,6)
    • 對每個參數組合進行交叉驗證評估
    • 自動選擇最優參數組合(如k=5時準確率86%最高)
  • 優勢特點: 避免手動調參的低效,自動完成參數組合、訓練、評估全流程

3.聯系

  • 關鍵區別:
    • 交叉驗證是數據集劃分方法
    • 網格搜索是參數優化工具
  • 最佳實踐: 兩者結合使用可形成完整的模型調優方案
  • 注意事項: 僅對需要人工設置的超參數使用該方法,模型自動學習的參數不適用

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

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

相關文章

如何評估CAN總線信號質量

CAN總線網絡的性能在很大程度上取決于其信號質量。信號質量差可能導致通信錯誤,進而引發系統故障、效率降低甚至安全隱患。因此,評估和確保CAN總線信號質量是維護系統健康和可靠性的關鍵。 在CAN總線網絡中,數據通過雙絞線上的差分信號傳輸。…

封裝一個小程序選擇器(可多選、單選、搜索)

組件 <template><view class"popup" v-show"show"><view class"bg" tap"cancelMultiple"></view><view class"selectMultiple"><view class"multipleBody"><view class&…

2.1HarmonyOS NEXT開發工具鏈進階:DevEco Studio深度實踐

HarmonyOS NEXT開發工具鏈進階&#xff1a;DevEco Studio深度實踐 在HarmonyOS NEXT全棧自研的技術體系下&#xff0c;DevEco Studio作為一站式開發平臺&#xff0c;通過深度整合分布式開發能力&#xff0c;為開發者提供了從代碼編寫到多端部署的全流程支持。本章節將圍繞多設…

LLMs之Tool:Workflow Use的簡介、特點、安裝和使用方法、以及案例應用

LLMs之Tool&#xff1a;Workflow Use的簡介、特點、安裝和使用方法、以及案例應用 目錄 Workflow Use的簡介 1、Workflow Use的特點 2、Workflow Use的愿景和路線圖 Workflow Use的安裝和使用方法 1、安裝 2、使用方法 查看所有命令 從 Python 中使用&#xff1a; 啟動…

二分法算法技巧-思維提升

背景&#xff1a; 在寫力扣題目“搜素插入位置 ”時&#xff0c;發現二分法的一個細節點&#xff0c;打算記錄下來&#xff0c;先看一張圖&#xff1a; 我們知道&#xff0c;排序數組&#xff0c;更高效的是二分查找法~~~而二分法就是切割中間&#xff0c;定義left是最開始的&…

Python 訓練營打卡 Day 40

訓練和測試的規范寫法 一、黑白圖片的規范寫法&#xff0c;以MNIST數據集為例 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms # 用于加載MNIST數據集 from torch.utils.data import DataLoader # 用于創建…

數據結構之棧:原理與常用方法

1. 棧的定義 Stack是Vector的一個子類&#xff0c;它實現標準的后進先出堆棧。Stack只定義了創建空堆棧的默認構造方法。&#xff08;實際上是實現了List接口&#xff0c;因為Vector是List的子類&#xff09;。 Stack() // 創建一個空棧 2. 棧的基本操作 // 壓棧操作 publi…

鴻蒙OSUniApp 開發支持圖片和視頻的多媒體展示組件#三方框架 #Uniapp

使用 UniApp 開發支持圖片和視頻的多媒體展示組件 前言 在現代移動應用中&#xff0c;圖片和視頻已成為內容展示的主流形式。一個優秀的多媒體展示組件不僅能提升用戶體驗&#xff0c;還能增強產品的互動性和視覺沖擊力。隨著鴻蒙&#xff08;HarmonyOS&#xff09;生態的不斷…

STM32CubeMX,arm-none-eabi-gcc簡單試用

在windows下&#xff0c;為stm32系列單片機編程&#xff0c;keil有了免費的試用版&#xff0c;有很多開發板示例&#xff0c;給學習單片機編程帶來很大的方便。 STM32CubeMX提供了stm32單片機的功能設置&#xff0c;在輸出方式上給出了幾種方式&#xff0c;有mdk&#xff08;k…

灌水論壇系統總體設計文檔

一、實驗題目 灌水論壇系統 二、實驗目的 旨在通過一個相對完整且功能豐富的Web應用實例&#xff0c;全面地實踐和鞏固Web開發所需的各項核心技術和工程方法&#xff0c;從而提升其綜合應用能力和解決實際開發問題的能力。它不僅僅是完成一個軟件&#xff0c;更是一個學習、…

Android 13中 配置簽名文件與內置相應的Apk

目錄 1.問題場景 2.實現思路 3.將測試代碼做成APK并配置簽名 4.將apk內置到系統當中的方法 1.問題場景 在展訊平臺中Android13的源碼已知的情況下&#xff0c;客戶寫了一個測試類用于調用系統中的一些接口來檢驗一些功能。為了方便調試排查問題我首先的思路是將客戶寫的測試…

HarmonyOS 5 應用開發導讀:從入門到實踐

一、HarmonyOS 5 概述 HarmonyOS 5 是華為推出的新一代分布式操作系統&#xff0c;其核心設計理念是"一次開發&#xff0c;多端部署"。與傳統的移動操作系統不同&#xff0c;HarmonyOS 5 提供了更強大的跨設備協同能力&#xff0c;支持手機、平板、智能穿戴、智慧屏…

C語言創意編程:用趣味實例玩轉基礎語法(4)

文章目錄 0. 前言1. &#x1f308; 彩虹文字生成器1.1 程序效果展示1.2 完整代碼解析1.3 關鍵技術詳解1.3.1 Windows控制臺API1.3.2 顏色編碼1.3.3 安全輸入1.3.4 跨平臺考慮 2. &#x1f3b5; 簡易音樂播放器2.1 程序效果展示2.2 完整代碼解析2.3 關鍵技術詳解2.3.1 Windows B…

【專題】神經網絡期末復習資料(題庫)

神經網絡期末復習資料&#xff08;題庫&#xff09; 鏈接&#xff1a;https://blog.csdn.net/Pqf18064375973/article/details/148332887?sharetypeblogdetail&sharerId148332887&sharereferPC&sharesourcePqf18064375973&sharefrommp_from_link 【測試】 Th…

Python訓練營打卡 Day41

簡單CNN 知識回顧 數據增強卷積神經網絡定義的寫法batch歸一化&#xff1a;調整一個批次的分布&#xff0c;常用與圖像數據特征圖&#xff1a;只有卷積操作輸出的才叫特征圖調度器&#xff1a;直接修改基礎學習率 卷積操作常見流程如下&#xff1a; 1. 輸入 → 卷積層 → Batch…

leetcode216.組合總和III:回溯算法中多條件約束下的狀態管理

一、題目深度解析與組合約束條件 題目描述 找出所有相加之和為n的k個數的組合&#xff0c;且滿足以下條件&#xff1a; 每個數只能使用一次&#xff08;范圍為1到9&#xff09;所有數字均為唯一的正整數組合中的數字按升序排列 例如&#xff0c;當k3&#xff0c;n9時&#…

Java面試實戰:從Spring到大數據的全棧挑戰

Java面試實戰&#xff1a;從Spring到大數據的全棧挑戰 在某家知名互聯網大廠&#xff0c;嚴肅的面試官正在面試一位名叫謝飛機的程序員。謝飛機以其搞笑的回答和對Java技術棧的獨特見解而聞名。 第一輪&#xff1a;Spring與微服務的探索 面試官&#xff1a;“請你談談Spring…

基于vue框架的動物園飼養管理系統a7s60(程序+源碼+數據庫+調試部署+開發環境)帶論文文檔1萬字以上,文末可獲取,系統界面在最后面。

系統程序文件列表 項目功能&#xff1a;飼養員,健康登記,工作進度,動物信息,進食信息,動物健康,動物醫治,飼料信息,工作留言 開題報告內容 基于Vue框架的動物園飼養管理系統開題報告 一、研究背景與意義 &#xff08;一&#xff09;研究背景 隨著城市化進程加快和公眾對生…

docker鏡像與dockerfile

一、docker鏡像 1.什么是鏡像 容器解決應用開發、測試和部署的問題&#xff0c;而鏡像解決應用部署環境問題。鏡像是一個只讀的容器模板&#xff0c; 打包了應用程序和應用程序所依賴的文件系統以及啟動容器的配置文件&#xff0c;是啟動容器的基礎。鏡像所打 包的文件內容就是…

流媒體基礎解析:音視頻封裝格式與傳輸協議

在視頻處理與傳輸的完整流程中&#xff0c;音視頻封裝格式和傳輸協議扮演著至關重要的角色。它們不僅決定了視頻文件的存儲方式&#xff0c;還影響著視頻在網絡上的傳輸效率和播放體驗。今天&#xff0c;我們將深入探討音視頻封裝格式和傳輸協議的相關知識。 音視頻封裝格式 什…