機器學習03——K近鄰

K近鄰算法學習筆記

一、算法簡介

K近鄰算法(K - Nearest Neighbors,簡稱KNN)是一種簡單而有效的分類和回歸算法。它的核心思想是“近朱者赤,近墨者黑”,即一個數據點的類別或值可以通過其周圍最近的K個鄰居來判斷。KNN算法不需要復雜的模型訓練過程,而是直接基于數據點之間的距離來做出決策。

二、算法原理

  1. 距離度量
    • 歐氏距離:最常用的距離度量方式,計算兩個點在各維度差值的平方和的平方根。例如,對于兩個點 (x) 和 (y),其歐氏距離為 (\sqrt{\sum_{i=1}^{n}(x_i - y_i)^2}),其中 (n) 是特征的維度。
    • 曼哈頓距離:計算兩個點在各維度差值的絕對值之和,適用于網格狀數據。公式為 (\sum_{i=1}^{n}|x_i - y_i|)。
    • 明可夫斯基距離:是歐氏距離和曼哈頓距離的推廣形式,公式為 (\left(\sum_{i=1}^{n}|x_i - y_i|p\right){1/p}),當 (p=2) 時為歐氏距離,當 (p=1) 時為曼哈頓距離。
  2. K值的選擇
    • K值的選擇對算法性能至關重要。如果K值過小,模型容易受到噪聲數據的影響,導致過擬合;如果K值過大,模型可能會將遠離目標點的數據也納入考慮范圍,導致欠擬合。
    • 通常需要通過交叉驗證等方法來選擇合適的K值。例如,可以嘗試不同的K值,計算每個K值下的模型性能指標(如準確率、召回率等),選擇性能最優的K值。
  3. 投票機制
    • 分類任務:對于分類問題,算法會統計目標點周圍最近的K個鄰居中每個類別的數量,然后選擇數量最多的類別作為目標點的預測類別。例如,如果K=5,目標點周圍有3個鄰居屬于類別A,2個鄰居屬于類別B,那么目標點將被預測為類別A。
    • 回歸任務:對于回歸問題,算法會計算目標點周圍最近的K個鄰居的值的平均值或加權平均值作為目標點的預測值。例如,如果K=3,目標點周圍3個鄰居的值分別為1、2、3,那么目標點的預測值可以是 ((1+2+3)/3=2)。

三、算法流程

  1. 數據預處理
    • 歸一化:由于KNN算法依賴距離計算,因此特征值的范圍對結果影響很大。需要對數據進行歸一化處理,將所有特征值縮放到相同的范圍(如0 - 1或 - 1到1)。常用的歸一化方法有最小 - 最大歸一化 ((x - \text{min})/(\text{max} - \text{min})) 和Z - score標準化 ((x - \mu)/\sigma),其中 (\mu) 是均值,(\sigma) 是標準差。
    • 去除噪聲數據:噪聲數據可能會干擾KNN算法的預測結果,因此需要通過數據清洗等方法去除噪聲數據。
  2. 計算距離
    • 對于每個測試樣本,計算其與訓練集中所有樣本之間的距離。根據選擇的距離度量方式(如歐氏距離、曼哈頓距離等),計算每個樣本之間的距離值。
  3. 選擇最近的K個鄰居
    • 根據計算出的距離,對訓練集中的樣本進行排序,選擇距離最近的K個樣本作為目標點的鄰居。
  4. 投票或平均
    • 對于分類問題,統計這K個鄰居中每個類別的數量,選擇數量最多的類別作為預測結果;對于回歸問題,計算這K個鄰居的值的平均值或加權平均值作為預測結果。

四、優缺點

  1. 優點
    • 簡單易實現:KNN算法原理簡單,實現起來也非常容易,不需要復雜的數學推導和優化過程。
    • 無需訓練模型:KNN算法不需要像其他算法(如神經網絡、決策樹等)那樣進行復雜的模型訓練,直接基于數據點之間的距離進行預測,適合小規模數據集。
    • 對數據的適應性強:KNN算法對數據的分布沒有假設,可以很好地適應各種類型的數據,包括線性和非線性數據。
  2. 缺點
    • 計算效率低:KNN算法需要計算測試樣本與訓練集中所有樣本之間的距離,對于大規模數據集,計算量非常大,效率較低。
    • 存儲要求高:KNN算法需要存儲整個訓練數據集,占用大量的存儲空間。
    • 對特征的權重不敏感:KNN算法對所有特征一視同仁,沒有考慮不同特征對目標變量的重要性,可能會受到無關特征的干擾。

五、應用場景

  1. 圖像識別:KNN算法可以用于圖像分類任務,例如手寫數字識別。通過計算圖像像素之間的距離,可以將新的圖像與已知的數字圖像進行對比,從而識別出數字的類別。
  2. 文本分類:在文本分類中,KNN算法可以用于判斷文本的類別。例如,將文本轉換為向量形式(如TF - IDF向量),然后計算文本之間的距離,根據最近的K個鄰居的類別來判斷文本的類別。
  3. 推薦系統:KNN算法可以用于基于用戶的推薦系統。通過計算用戶之間的相似度(如購買行為、評分等),找到與目標用戶最相似的K個用戶,然后將這些用戶喜歡的物品推薦給目標用戶。

六、代碼實現(Python示例)

以下是使用Python實現KNN算法的簡單示例:

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 示例數據
X = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)# 創建KNN模型
knn = KNeighborsClassifier(n_neighbors=3)# 訓練模型
knn.fit(X_train, y_train)# 進行預測
y_pred = knn.predict(X_test)# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"準確率:{accuracy}")

七、總結

KNN算法是一種簡單而有效的機器學習算法,適用于分類和回歸任務。它基于數據點之間的距離進行預測,具有簡單易實現、對數據適應性強等優點,但也存在計算效率低、存儲要求高等缺點。在實際應用中,需要根據數據的特點和任務需求選擇合適的K值和距離度量方式,并對數據進行預處理,以提高算法的性能。

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

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

相關文章

序列化 反序列化實例

在Python中, pickle 模塊常用于實現對象的序列化和反序列化,以下是一個簡單的實例: import pickle # 定義一個類 class Person: def __init__(self, name, age): self.name name self.age age # 創建一個Person對象 person Person("…

代碼隨想錄算法訓練營第十九天

LeetCode題目: 77. 組合216. 組合總和 III17. 電話號碼的字母組合2537. 統計好子數組的數目(每日一題)516. 最長回文子序列1039. 多邊形三角剖分的最低得分543. 二叉樹的直徑124. 二叉樹中的最大路徑和2246. 相鄰字符不同的最長路徑 其他: 今日總結 往期打卡 77. 組合 跳轉: 7…

存算分離看場景

計算機行業是唯一一個比時裝行業概念更多的行業。概念頻出,最慢的話半年一定出一個,短的話半個月就能看到新的名詞和技術甚至是概念。 存算分離的概念 我第一次聽到存算分離時候還是從Hadoop上聽到的。然后就去問什么是存算分離。聽了講解以后&#xf…

MCP協議,.Net 使用示例

服務器端示例 基礎服務器 以下是一個基礎的 MCP 服務器示例,它使用標準輸入輸出(stdio)作為傳輸方式,并實現了一個簡單的回顯工具: using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.H…

智能語音處理+1.5使用PocketSphinxshinx實現語音轉文本(100%教會)

歡迎來到智能語音處理系列的最后一篇文章,到這里,基本上語音處理是沒問題了. 第一篇:智能語音處理1.1下載需要的庫(100%實現)-CSDN博客 第二篇:智能語音識別1.2用SAPI實現文本轉語音(100%教會)-CSDN博客 第三篇:智能語音處理1.3用SpeechLib實現文本轉語音(100%教會)…

Kubernetes 節點摘除指南

目錄 一、安全摘除節點的標準流程 1. 確認節點名稱及狀態 2. 標記節點為不可調度 3. 排空(Drain)節點 4. 刪除節點 二、驗證節點是否成功摘除 1. 檢查節點列表 2. 檢查節點詳細信息 3. 驗證 Pod 狀態 三、徹底清理節點(可選&#xf…

信息安全管理與評估2021年國賽正式卷答案截圖以及十套國賽卷

2021年全國職業院校技能大賽高職組 “信息安全管理與評估”賽項 任務書1 賽項時間 共計X小時。 賽項信息 賽項內容 競賽階段 任務階段 競賽任務 競賽時間 分值 第一階段 平臺搭建與安全設備配置防護 任務1 網絡平臺搭建 任務2 網絡安全設備配置與防護 第二…

3D語義地圖中的全局路徑規劃!iPPD:基于3D語義地圖的指令引導路徑規劃視覺語言導航

作者: Zehao Wang, Mingxiao Li, Minye Wu, Marie-Francine Moens, Tinne Tuytelaars 單位:魯汶大學電氣工程系,魯汶大學計算機科學系 論文標題: Instruction-guided path planning with 3D semantic maps for vision-language …

《AI大模型應知應會100篇》第20篇:大模型倫理準則與監管趨勢

第20篇:大模型倫理準則與監管趨勢 摘要 隨著人工智能(AI)技術的飛速發展,尤其是大模型(如GPT、PaLM等)在自然語言處理、圖像生成等領域的廣泛應用,AI倫理問題和監管挑戰日益凸顯。本文將梳理當…

【Ai】dify:Linux環境安裝 dify 詳細步驟

一、什么是dify Dify 是一個 開源的大語言模型(LLM)應用開發平臺,旨在幫助開發者快速構建基于 AI 的應用程序,例如智能對話助手、知識庫問答、內容生成工具等。它提供了可視化的流程編排、模型集成、數據管理等功能,降低了開發門檻,支持快速迭代和部署。 核心功能與特點…

CentOS 操作系統下搭建 tsung性能測試環境

寫在前面 為何這么安裝,實際就是這么做的,這是經過好幾次實踐得出的經驗總結。 這為了讓大家更清楚的知道怎么安裝 tsung性能測試環境,按步照搬的安裝即可。 步驟 1、 下載軟件安裝包 CentOS-6.0-x86_64-bin-DVD1.iso jdk-6u4-linux-x64-rpm.bin erlang: otp_src_1…

Vulkanised

Vulkanised 1. About VulkanisedReferences The Premier Vulkan Developer Conference premier /?premi?(r)/ n. 總理;(尤用于報章等) 首相;(加拿大的) 省總理;地區總理 adj. 第一的;首要的;最著名的;最…

C++之 動態數組

一、新建一個動態數組 數組名和下標操作符[]的組合可以被替換成一個指向該數組的基地址的指針和對應的指針運算: int a[20]; int *x a; 指針變量 x 指向數組 a 的地址, a[0] 和 *x 都代表數組的第一個元素。 于是,根據指針運算原則&…

ubuntu1804服務器開啟ftp,局域網共享特定文件給匿名用戶

要在 Ubuntu 18.04 上設置一個 FTP 服務器,滿足以下要求: 允許匿名登錄(無需賬號密碼)。指定分享特定目錄下的文件。只允許只讀下載。 可以使用 vsftpd(Very Secure FTP Daemon)來實現。以下是詳細步驟&a…

mcp和API區別

MCP(Model Context Protocol,模型上下文協議)與傳統API(Application Programming Interface,應用程序編程接口)在技術架構、集成方式和應用場景等方面存在顯著差異,以下是主要區別的總結&#x…

高版本Android (AIDL HAL) 使用HIDL方法

目錄 修改步驟和編譯方法 注意事項 Android 11 引入了使用 AIDL 實現 HAL 的功能。 后續Android新版本,HAL默認切到了使用AIDL. 因此當導入舊HIDL實現方式時,需要做一些修改。 1.將HAL HIDL模塊拷貝到相應目錄,進行編譯 source build/envsetup.sh lunch xxx mmm 模塊路徑 1.…

基于redis 實現我的收藏功能優化詳細設計方案

基于redis 實現我的收藏功能優化詳細設計方案 一、架構設計 +---------------------+ +---------------------+ | 客戶端請求 | | 數據存儲層 | | (收藏列表查詢) | | (Redis Cluster) | +-------------------…

學習筆記 - Swfit 6.1 - 語法概覽

獲取版本號 swift -versionHello world print("Hello, world!")末尾不需要分號 值 常量(let),變量(var) var myVariable 42 myVariable 50 let myConstant 42可以顯式聲明變量類型,若沒有則隱式推斷,類似下面的Double let implicitInteger 70 let implicit…

確保連接器后殼高性能互連的完整性

本文探討了現代后殼技術如何促進高性能互連的電氣和機械完整性,以及在規范階段需要考慮的一些關鍵因素。 當今的航空航天、國防和醫療應用要求連接器能夠提供高速和緊湊的互連,能夠承受振動和沖擊,并保持對電磁和射頻干擾 (EMI/R…

第IV部分有效應用程序的設計模式

第IV部分有效應用程序的設計模式 第IV部分有效應用程序的設計模式第23章:應用程序用戶界面的架構設計23.1設計考量23.2示例1:用于非分布式有界上下文的一個基于HTMLAF的、服務器端的UI23.3示例2:用于分布式有界上下文的一個基于數據API的客戶端UI23.4要點第24章:CQRS:一種…