機器學習300問】95、什么是KNN算法?它和K-means什么關系?

一、KNN算法的定義

? ? ? ? KNN(K-Nearest Neighbors)算法,是一種簡單而有效的監督學習方法。它既可以用在分類任務,也可用在回歸任務中。KNN算法的核心思想:在特征空間中,如果有一個數據點周圍的大多數鄰居屬于某個類別,則該數據點也應該被歸為那么類別(分類任務中)。或者其預測值應該接近這些鄰居的平均值(回歸任務中)。

二、K值的選擇

????????K是一個重要的超參數,其大小直接影響預測的準確性。

  • K值較小可能導致過擬合,因為模型變得對噪聲敏感;
  • K值較大可能導致欠擬合,因為模型可能開始考慮遠處的、不那么相關的鄰居。

? ? ? ? 可以依據經驗來選擇,雖然經驗可以在某些情況下提供指導,但確定K值通常依賴于更系統的方法。以下是幾種常用的策略:?

(1)依據經驗

? ? ? ? 經驗一:對于K的初試選擇,K值常常在較小的范圍內試探,比如從1開始,逐漸增加到如5、10、15等。這個范圍的選擇是為了平衡過擬合和欠擬合的風險。K值太小(如K=1)時,模型可能對噪聲很敏感,容易過擬合;而K值太大時(比如大于訓練樣本數的平方根),模型可能會忽略局部特征,趨向于簡單多數類,導致欠擬合。

? ? ? ? 經驗二:如果數據集較小,K值通常不宜設置得太大,以免引入過多的噪聲或稀釋關鍵信息。相反,大數據集可能允許較大的K值。

? ? ? ? 經驗三:有時推薦使用奇數K值以避免出現平票的情況,尤其是當類別分布較為均衡時。如果采用偶數K且遇到類別票數相同的情況,可能需要額外的規則來決定歸屬類別,如隨機選擇或考慮距離加權。

(2)交叉驗證

????????這是一種常用的模型選擇方法,也可以用來確定K值。具體操作是將數據集分割成訓練集和驗證集,然后對于每個候選的K值,使用訓練集訓練模型并在驗證集上評估性能。重復這一過程,選擇在驗證集上表現最好的K值。

三、KNN算法步驟

(1)訓練階段

????????KNN算法非常不同,它的訓練階段不需要學習任何模型參數,它只是簡單地存儲所有的訓練數據集,不做任何進一步的處理。

(2)預測階段

① 數據準備與設置參數

????????收集數據:首先,需要有一組已經分類好的訓練數據集,每條數據包括多個特征和對應的標簽(分類任務)或數值(回歸任務)。特征選擇與標準化:選擇對分類或回歸有用的特征,并對數據進行預處理,如縮放特征值到同一尺度,以消除特征間因量綱不同造成的影響。選擇K值:這是最重要的超參數之一,決定了在分類或回歸時要考慮的最近鄰居的數量。

③ 計算距離

????????對于每一個新的未知類別的樣本,計算其與訓練集中每個樣本之間的距離。常用的距離度量方法有歐氏距離、曼哈頓距離、切比雪夫距離等。

④ 選擇鄰居并做出決策

????????根據計算出的距離,找出距離最近的K個訓練樣本作為鄰居。?

  • 分類任務:查看這K個鄰居中哪個類別的樣本最多,將新樣本歸為該類別。可以簡單計數或距離加權(考慮距離遠近)后決定。
  • 回歸任務:取這K個鄰居的目標值的平均值(或加權平均)作為新樣本的預測值。

⑤ 評估模型并優化調整

????????使用交叉驗證或獨立的測試集來評估模型的性能,包括準確率、召回率、F1分數等。根據評估結果,可能需要調整K值或考慮其他改進措施,如使用不同的距離度量方法、維度減少(如PCA)、或采用KD樹等數據結構加速最近鄰搜索。

四、KNN與K-means的關系

(1)KNN與K-means的區別

  • 應用場景不同:KNN用于有監督學習的分類和回歸問題,而K-means用于無監督學習的聚類任務。
  • 對初始條件敏感性不同:K-means算法對初始聚類中心的選擇非常敏感,不同的初始化可能導致完全不同的聚類結果。KNN算法則不受初始條件影響,因為它是基于查詢點周圍最近鄰的直接比較,沒有迭代優化聚類結構的過程。
  • K的意義不同:在KNN中,K代表考慮的最近鄰居的數量,直接影響模型的復雜度和預測的穩定性。較大的K值可以減少噪聲的影響,但可能使邊界變得模糊;較小的K值則可能對噪聲敏感,但邊界更清晰。在K-means中,K代表期望形成的簇的數量,需要事先指定,且選擇合適的K值對聚類效果至關重要。錯誤的K值可能導致過分割或欠分割問題。

(2)KNN的優缺點

優點:簡單易懂,原理直觀,實現起來相對直接。無需訓練,沒有復雜的訓練過程,計算負擔主要在預測時。既能分類又能回歸

缺點:計算成本高,特別是對于大規模數據集,需要計算測試樣本與所有訓練樣本之間的距離,非常耗時。存儲需求大,需要存儲整個訓練數據集。對異常值敏感,訓練數據中的異常點可能嚴重影響預測結果。特征尺度影響大,不同特征的尺度差異可能導致距離度量失真,通常需要進行特征縮放。

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

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

相關文章

5. JVM面試題匯總

Java全棧面試題匯總目錄-CSDN博客 1. 說一下JVM的主要組成部分及其作用? JVM包含兩個子系統和兩個組件,兩個子系統為Class loader(類裝載)、Execution engine(執行引擎);兩個組件為Runtime data area(運行時數據區)、Native Interface(本地接口)。 Cl…

linux mail命令及其歷史

一、【問題描述】 最近隔壁組有人把crontab刪了,crontab這個命令有點反人類,它的參數特別容易誤操作: crontab - 是刪除計劃表 crontab -e 是編輯,總之就是特別容易輸入錯誤。 好在可以通過mail命令找回,但是mai…

【計算機網絡】初識Tcp協議

💻文章目錄 📄前言Tcp基礎概念Tcp 的報文格式三次握手四次揮手 Tcp的滑動窗口機制概念超時重傳機制高速重傳 TCP傳輸控制機制流量控制擁堵控制慢啟動 Tcp的性能優化機制延遲應答捎帶應答 📓總結 📄前言 TCP三次握手、四次揮手&…

Java刷題總結(面試)

1、String類 String不可變 java 中String是 immutable的,也就是不可變,一旦初始化,其引用指向的內容是不可變的。 也就是說,String str “aa”;str“bb”;第二句不是改變“aa”所存儲地址的內容&#xf…

Overleaf是什么?如何升級到標準版OR專業版?

1. Overleaf介紹 Overleaf是一個使用LaTeX進行多人協同編輯的平臺,可以免費注冊和使用,不用下載LaTeX軟件,是最為著名的LaTeX在線協作系統。 主要特色是有LaTeX插件,編輯功能十分完善,有實時預覽(即編即看…

Java 使用繼承和重寫父類方法寫一個商品入庫案例

package 練習.商品入庫;import java.util.Scanner; // 抽象手機類 public abstract class Phone {//測試方法public static void main(String[] args){// 華為手機huawei h new huawei();h.setName("華為P40");h.setPrice(1999.99);h.setConfiguration("8128GB…

docker 安裝 私有云盤 nextcloud

拉取鏡像 # 拉取鏡像 sudo docker pull nextcloud運行nextcloud 容器 # 內存足夠可以不進行內存 --memory512m --memory-swap6g # 橋接網絡 --network suixinnet --network-alias nextcloud \ sudo docker run -itd --name nextcloud --restartalways \ -p 9999:80 \ -v /m…

【排名公布】綿陽男科醫院排名發布,綿陽高水男科醫院究竟咋樣啊?

【排名公布】綿陽男科醫院排名發布,綿陽高水男科醫院究竟咋樣啊? 綿陽高水醫院,是一家醫保定點單位,地址位于綿陽市涪城區長虹大道北段113號。一所與國際接軌的現代化男子醫院,有良好地就醫環境,擁有多名有經驗的專家…

基于Tensorflow實現了三個模型對MNIST數據集的識別

歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 MNIST手寫數字數據集是計算機視覺和機器學習領域的一個經典數據集,常用于評估圖像…

ubuntu安裝文件

ubuntu如何安裝deb文件? ubuntu離線安裝deb文件的兩種方法_系統工具_軟件教程_腳本之家 1. 雙擊安裝 2.命令安裝 1.、我們打開終端窗口,然后先使用cd命令進入deb文件所在的目錄,例如: cd ~/Downloads 2、接著我們就可以使用dpkg命令來安裝這…

攻防世界-mobile-easy-app詳解

序言 這道題網上很多分析,但是分析的都是arm版本的,我選了arm64的來分析,arm64相比arm難度高一些,因為arm64編譯器搞了inline優化,看起來略抽象 分析 這道題邏輯很簡單,輸入flag然后一個check函數驗證&a…

改進rust代碼的35種具體方法-類型(十八)-不要驚慌

上一篇文章 它看起來非常復雜,這就是為什么它貼合的塑料蓋上用大號友好字母印上“不要恐慌”的原因之一。——道格拉斯亞當斯 此項目的標題將更準確地描述為更喜歡返回Result而不是使用panic!(但不要驚慌更吸引人)。 Rust的panic機制主要是為…

算法入門----小話算法(1)

下面就首先從一些數學問題入手。 Q1&#xff1a; 如何證明時間復雜度O(logN) < O(N) < O(NlogN) < O(N2) < O(2N) < O(N!) < O(NN)? A&#xff1a; 如果一個以整數為參數的不等式不能很容易看出不等的關系&#xff0c;那么最好用圖示或者數學歸納法。 很顯…

Python3 筆記:sort() 和 sorted() 的區別

1、sort() 可以對列表中的元素進行排序&#xff0c;會改變原列表&#xff0c;之前的順序不復存在。 list.sort&#xff08;key&#xff0c; reverse None&#xff09; key&#xff1a;默認值是None&#xff0c;可指定項目進行排序&#xff0c;此參數可省略。 reverse&#…

rmxprt轉換的3D模型只有一半?---模大獅模型網

在3D建模和渲染的工作流程中&#xff0c;我們經常需要用到各種轉換工具來兼容不同平臺或軟件之間的模型格式。rmxprt(或其他類似的模型轉換工具)就是其中的一種&#xff0c;它能夠將模型從一種格式轉換為另一種格式。然而&#xff0c;有時在轉換過程中可能會遇到一些問題&#…

微服務雪崩問題、Sentinel(請求限流、線程隔離、服務熔斷)、Seata分布式事務

文章目錄 前言一、微服務保護二、Sentinel2.1 微服務整合2.2 簇點鏈路2.3 請求限流2.4 線程隔離2.5 服務熔斷 三、分布式事務3.1 Seata3.1.1 Seata架構3.1.2 部署TC服務3.1.3 微服務集成Seata 3.2 XA模式3.3 AT模式 前言 微服務之間為什么會雪崩&#xff1f;怎么解決雪崩問題&…

MySQL存儲過程淺析

存儲過程 定義&#xff1a; 存儲過程是一組為了完成特定功能的SQL語句&#xff0c;是由一些SQL語句組成的代碼塊&#xff0c;這些代碼塊像方法一樣實現一些功能&#xff08;對單表或多表的增刪改查&#xff09;&#xff0c;然后給代碼塊起一個名字&#xff0c;用到的時候再調用…

Oracle體系結構初探:數據庫啟動與停止

往期內容 參數管理 控制文件添加 啟動 在啟動Oracle數據庫時&#xff0c;我們一般會使用如下命令&#xff1a; startup 雖然命令只有一個&#xff0c;但其中卻是經歷了3個階段&#xff0c;從下面執行 startup 命令返回也可以看出來。 總結為3個階段&#xff1a; nomount&…

ubuntu下python導入.so庫

ubuntu下python導入.so庫 文章目錄 ubuntu下python導入.so庫1. 什么是.so文件&#xff1f;2. 使用python腳本編譯.so庫文件Reference 最近遇到了python導入c編譯的 .so庫的問題&#xff0c;發覺挺有意思&#xff0c;于是寫下這篇blog以作記錄。 1. 什么是.so文件&#xff1f; …

【簡單介紹下深度神經網絡】

&#x1f3a5;博主&#xff1a;程序員不想YY啊 &#x1f4ab;CSDN優質創作者&#xff0c;CSDN實力新星&#xff0c;CSDN博客專家 &#x1f917;點贊&#x1f388;收藏?再看&#x1f4ab;養成習慣 ?希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出…