AI——K近鄰算法

文章目錄

  • 一、什么是K近鄰算法
  • 二、KNN算法流程總結
  • 三、Scikit-learn工具
    • 1、安裝
    • 2、導入
    • 3、簡單使用
  • 三、距離度量
    • 1、歐式距離
    • 2、曼哈頓距離
    • 3、切比雪夫距離
    • 4、閔可夫斯基距離
    • 5、K值的選擇
    • 6、KD樹

一、什么是K近鄰算法

如果一個樣本在特征空間中的k個最相似(即特征空間中最鄰近)的樣本中的大多數屬于某一個類別,則該樣本也屬于這個類別。

二、KNN算法流程總結

  • 1、計算已知類別數據集中的點與當前點之間的距離
  • 2、按距離遞增排序
  • 3、選取與當前距離最小的k個點
  • 4、統計前k個點所在的類別出現的頻率
  • 5、返回前k個點出現頻率最高的類別作為當前點的預測分類

三、Scikit-learn工具

1、安裝

pip3 install scikit-learn

2、導入

import sklearn

3、簡單使用

在這里插入圖片描述

三、距離度量

1、歐式距離

歐式距離是最容易直觀理解的距離度量方法,我們小學、初中、高中接觸到的兩個點在空間中的距離一般都是值歐式距離。
在這里插入圖片描述

2、曼哈頓距離

在這里插入圖片描述

3、切比雪夫距離

在這里插入圖片描述

4、閔可夫斯基距離

在這里插入圖片描述

5、K值的選擇

在這里插入圖片描述

6、KD樹

import numpy as np
# 自己實現kd樹
# 一、構建kd樹
# 1.確定根據哪一個維度進行劃分,求方差,方差越大,數據越分散
# 2.以哪個點為切面,求中位數,離中位數越近的點作為根節點
# 3.比中位數的該維度小的放左邊,大的放右邊
# 4.重復以上步驟,所有的點就都在樹中了
class KdNode(object):def __init__(self, node_data, split_index, left, right):self.node_data = np.array(node_data) # 節點的數據self.split_index = split_index # 分割的維度的序號self.left = left # 左節點self.right = right # 右節點class KdTree(object):split_index_list = np.array([])data = np.array([])rootNode = Nonedef __init__(self, data):self.k = len(data[0]) # 獲取數據的維度self.data = np.array(data) # 所有的數據# 獲取分割的維度順序數組self.getSplitIndexList()# 構建樹self.rootNode = self.createNode(0, self.data)def getSplitIndexList(self):# 獲取方差排序后的下標的數組,最后[::-1來反轉]self.split_index_list = np.argsort([np.var(self.data[:, (i)]) for i in range(self.k)])[::-1]def closest_to_median_index(self, array):median = np.median(array)diff = np.abs(array - median)return diff.argmin()  # 返回第一個最小差值的索引def createNode(self, index, dataList):if len(dataList) == 0:return Nonesplit_index = self.split_index_list[index]split_next = (index + 1) % self.k# 獲取分割維度的中位數下標data_index = self.closest_to_median_index(dataList[:,(split_index)])# 獲取該位置的數據rootData = dataList[data_index]# 刪除找到的這個節點dataList = np.delete(dataList, data_index, 0)# 獲取左側的所有數據leftData = dataList[dataList[:,(split_index)] <= rootData[split_index]]# 獲取右側所有的數據rightData = dataList[dataList[:,(split_index)] > rootData[split_index]]return KdNode(rootData, split_index, self.createNode(split_next, leftData), self.createNode(split_next, rightData))

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

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

相關文章

transient關鍵字深度解析

Java transient 關鍵字深度解析 transient(意思:瞬時的,瞬間的) 1. 核心概念 (1) 基本定義 作用:標記字段不參與序列化 適用場景: 敏感數據(如密碼、密鑰) 臨時計算字段 依賴運行時環境的字段(如Thread對象) (2) 語法示例 java public class User implements Se…

信刻電子檔案藍光光盤刻錄安全檢測長期歸檔

信刻一直致力于為檔案館、各行業檔案部門&#xff0c;提供跨網數據交換、電子檔案數據磁光異質備份歸檔解決方案。所研制的電子檔案光盤智能長期歸檔系統&#xff0c;滿足國產環境下”刻、管、存、檢、用”全生命周期管理應用需求&#xff0c;能夠提供一份離線歸檔、一份近線存…

Word 中“母版頁”的等效機制

Word 和 PowerPoint 不太一樣——**Word 實際上沒有像 PowerPoint 那樣的“母版頁&#xff08;Master Page&#xff09;”**功能。但它有1個和“母版頁”功能類似的東西&#xff0c;可能造成你看到的“校徽自動出現在每一頁”的現象&#xff1a; ? Word 中“母版頁”的等效機制…

Go:反射

為什么使用反射 在編程中&#xff0c;有時需編寫函數統一處理多種值類型 &#xff0c;這些類型可能無法共享同一接口、布局未知&#xff0c;甚至在設計函數時還不存在 。 func Sprint(x interface{}) string {type stringer interface {String() string}switch x : x.(type) …

SS25001-多路復用開關板

1 概述 1.1 簡介 多路復用開關板是使用信號繼電器實現2線制的多路復用開關板卡&#xff1b;多路復用開關是一種可以將一個輸入連接到多個輸出或一個輸出連接到多個輸入的拓撲結構。這種拓撲通常用于掃描&#xff0c;適合將一系列通道自動連接到公共線路的的設備。多路復用開…

vue3 nprogress 使用

nprogress 介紹與作用 1.nprogress 是一個輕量級的進度條組件&#xff0c;主要用于在頁面加載或路由切換時顯示一個進度條&#xff0c;提升用戶體驗。它的原理是通過在頁面頂部創建一個 div&#xff0c;并使用 fixed 定位來實現進度條的效果 2.在 Vite Vue 3 項目中&#xf…

Jsp技術入門指南【六】jsp腳本原理及隱式對象

Jsp技術入門指南【六】jsp腳本原理及隱式對象 前言一、JSP 腳本元素1.1 聲明1.2 表達式1.3 腳本標簽 二、JSP 的隱式對象是什么三、隱式對象詳解outrequestsessionapplicationconfigexception 前言 在之前的博客中&#xff0c;我們已經介紹了JSP的環境搭建、編譯文件查找以及生…

vue3推薦的移動table庫

vxe-table https://gitee.com/js-class/vxe-table#https://gitee.com/link?targethttps%3A%2F%2Fvxetable.cn 文檔api https://vxetable.cn/#/component/table/other/bookkeepingVoucher 引入步驟 安裝 npm install xe-utils vxe-tablenext 在項目main.js引入 import …

HOOPS Exchange 與HOOPS Communicator集成:打造工業3D可視化新標桿!

一、概述 在工業3D開發、BIM建筑、數字孿生和仿真分析等高端應用場景中&#xff0c;數據格式復雜、模型體量龐大、實時交互體驗要求高&#xff0c;一直是困擾開發者的難題。Tech Soft 3D旗下的HOOPS Exchange和HOOPS Communicator&#xff0c;正是解決這類問題的黃金搭檔。二者…

《軟件設計師》復習筆記(14.3)——設計模式

目錄 一、設計模式分類 1. 創建型模式&#xff08;Creational Patterns&#xff09; 2. 結構型模式&#xff08;Structural Patterns&#xff09; 3. 行為型模式&#xff08;Behavioral Patterns&#xff09; 真題示例&#xff1a; 一、設計模式分類 架構模式 高層設計決…

HarmonyOS:使用Refresh組件實現頁面下拉刷新上拉加載更多

一、前言 可以進行頁面下拉操作并顯示刷新動效的容器組件。 說明 該組件從API Version 8開始支持。后續版本如有新增內容&#xff0c;則采用上角標單獨標記該內容的起始版本。該組件從API Version 12開始支持與垂直滾動的Swiper和Web的聯動。當Swiper設置loop屬性為true時&…

55、?屏加載?屏怎么進?優化

答&#xff1a; &#xff08;1&#xff09;使?CDN 減?代碼體積&#xff0c;加快請求速度&#xff1b; (2)SSR通過服務端把所有數據全部渲染完成再返回給客?端&#xff1b; (3) 路由懶加載&#xff0c;當??訪問的時候&#xff0c;再加載相應模塊&#xff1b; (4) 使?外…

什么是Python單例模式

什么是Python單例模式 Python單例模式是一種創建型設計模式,目的是確保一個類僅有一個實例,并提供一個全局訪問點來獲取該實例。以下從作用和示例進行介紹: 作用 控制資源使用:避免對系統資源的重復消耗,像數據庫連接、文件句柄等稀缺資源,只創建一個實例來管理使用,防…

Java 2025:解鎖未來5大技術趨勢,Kotlin融合AI新篇

各位Java開發者們好&#xff01;&#x1f680; 2025年的Java世界正在經歷一場前所未有的技術變革。作為深耕Java領域多年的技術博主&#xff0c;今天我將帶大家深入探索Java生態即將迎來的5大技術趨勢&#xff0c;特別是Kotlin的深度融合和AI技術的新篇章。準備好了嗎&#xff…

計算機視覺cv2入門之車牌號碼識別

前邊我們已經講解了使用cv2進行圖像預處理與邊緣檢測等方面的知識&#xff0c;這里我們以車牌號碼識別這一案例來實操一下。 大致思路 車牌號碼識別的大致流程可以分為這三步&#xff1a;圖像預處理-尋找車牌輪廓-車牌OCR識別 接下來我們按照這三步來進行講解。 圖像預處理 …

CExercise_13_1排序算法_3快速排序算法,包括單向分區以及雙向分區

題目&#xff1a; 請手動實現快速排序算法&#xff0c;包括單向分區以及雙向分區&#xff1a; // 單向分區快速排序算法 void quick_sort_one_way(int arr[], int len); //雙向分區快速排序算法 void quick_sort_two_way(int arr[], int len); 關鍵點 分析&#xff1a; &#x…

FPGA-VGA

目錄 前言 一、VGA是什么&#xff1f; 二、物理接口 三、VGA顯示原理 四、VGA時序標準 五、VGA顯示參數 六、模塊設計 七、波形圖設計 八、彩條波形數據 前言 VGA的FPGA驅動 一、VGA是什么&#xff1f; VGA&#xff08;Video Graphics Array&#xff09;是IBM于1987年推出的…

Linux和Ubuntu的驅動適配情況

舊 一、Linux Yocto3.0 二、Ubuntu 1.驅動 1.rtc正常 2.led正常 3.加密芯片正常 4.硬件看門狗不行&#xff0c;驅動已經適配好&#xff0c;等硬件修復后&#xff0c;直接使用腳本就可以 5.千兆網口可以&#xff0c;兩個百兆網口不行 6.USB上面和下面都可以&#xff08;插u盤…

Python 文本和字節序列(處理文本文件)

本章將討論下述話題&#xff1a; 字符、碼位和字節表述 bytes、bytearray 和 memoryview 等二進制序列的獨特特性 全部 Unicode 和陳舊字符集的編解碼器 避免和處理編碼錯誤 處理文本文件的最佳實踐 默認編碼的陷阱和標準 I/O 的問題 規范化 Unicode 文本&#xff0c;進行安全的…

【Android學習記錄】工具使用

文章目錄 一. 精準找視圖資源ID1. 準備工作2. 使用 uiautomator 工具2.1. 獲取設備的窗口內容2.2. Pull XML 文件2.3. 查看 XML 文件 3. 直接使用 ADB 命令4. 使用 Android Studio 的 Layout Inspector總結 二. adb shell dumpsys activity1. 如何使用 ADB 命令2. 輸出內容解析…