Python中KNN演算法(k-近鄰演算法)的詳細介紹(附範例)
本篇文章帶給大家的內容是關於Python中KNN演算法(k-近鄰演算法)的詳細介紹(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
KNN演算法是一種資料分類演算法,以距離樣本k個最鄰近資料的類別代表樣本的類別,因此也叫作k-近鄰演算法。 KNN演算法是資料探勘中最簡單的方法之一,大致可分為以下幾個步驟:
#訓練資料:原始資料集中所有資料類別的資料。
測試資料:我們將要拿來測試的資料樣本。
處理資料
我們得到的測試數據,通常和訓練資料是不同維的,這時候就需要我們將測試資料升維到和訓練資料相同,python的numpy中自帶了一個tile()函數可以幫助我們將測試資料升維。
將資料向量化
測試資料升維後,我們為了計算距離樣本點的距離,此時需要將資料向量化,所謂的向量化就很簡單了,即將兩個同維資料相減。
計算歐式距離
歐式距離,即歐幾裡得距離,運用勾股定理即可求出,將升維後的測試資料和訓練資料相減所得的向量組的每一個向量的平方和開方即可得到由距離組成的向量組。
根據距離進行分類
選擇k個距離樣本點距離最小的數據,統計在這k個數據中哪一類數據類別出現的頻率最高,樣本點的資料類別即可確定。
演算法實作:
1.首先我們需要引入numpy以及operator,輸入from numpy import *
和import operator
。
2.接下來我們需要定義一個knn函數,在knn函數中我們需要引入四個參數,分別為k、訓練資料、測試資料和資料類別。
3.接下來我們需要先對資料進行升維操作,需要用到numpy下的tile(a,(b,c))函數,a為要進行升維操作的數據,也就是測試數據,b為要對測試數據升維的行數據,c為要對測試數據升維的列數據。
4.在上一操作中,我們一般需要取得訓練資料的行數和列數,這時需要用到shape()函數,shape()函數傳回的是由訓練資料的行和列組成的元組,我們想要知道訓練資料的行數或列數只需透過數組元素下標的方式來引用。
5.資料的維度相同後,我們要將兩個資料相減得到一個向量,再計算這個向量每個值的平方和的開方即得測試資料到訓練資料的距離,再呼叫argsort()函數將距離依照升序排列,不過此函數傳回的是數組元素的下標。
6.接下來我們為了直覺的看到不同數據類別的出現次數,需要設定一個空字典來存放這些數據,在得到字典後,我們需要將字典依照不同資料類別的出現次數降序排列,進而傳回字典的第一個值即得到測試資料的資料類別。
7.演算法程式碼如下:
from numpy import * import operator def knn(k, test_data, train_data, labels): train_size = train_data.shape[0] #获取训练数据的行数 test_size = tile(test_data, (train_size, 1)) #将测试数据的行升维 minus = test_size-train_data #得到向量 sq_minus = minus**2 sum_sq_minus = sq_minus.sum(axis=1) #得到平方后的每个数组内元素的和 distc = sum_sq_minus**0.5 sort_distc = distc.argsort() #将距离按升序排列 static = {} for i in range(0, k): vote = labels[sort_distc[i]] #获取数据类型 static[vote] = static.get(vote, 0)+1 #统计每个数据类型的出现次数 sort_static = sorted(static.items(), key=operator.itemgetter(1), reverse=True) #将字典中的元素按出现次数降序排列 return sort_static[0][0] #返回出现次数最多的数据类型
8.演算法中需要對字典進行排序,因此需要用到sorted()函數,sorted()函數共有三個參數,分別為items (),operator.itemgetter(),reverse,預設的排序為升序,我們要想依照降序排列需要令第三個參數為True,在這裡我們是依照字典的values進行排序的,因此我們需要輸入sorted(static.items(), key=operator.itemgetter(1), reverse=True)
,operator.itemgetter()函數中的值為1時,是依照字典的values排序,值為0時,是依照字典的key進行排序。
9.排序後存取元素的方式與存取二維陣列元素的方式一致
以上是Python中KNN演算法(k-近鄰演算法)的詳細介紹(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

在CentOS系統上高效訓練PyTorch模型,需要分步驟進行,本文將提供詳細指南。一、環境準備:Python及依賴項安裝:CentOS系統通常預裝Python,但版本可能較舊。建議使用yum或dnf安裝Python3併升級pip:sudoyumupdatepython3(或sudodnfupdatepython3),pip3install--upgradepip。 CUDA與cuDNN(GPU加速):如果使用NVIDIAGPU,需安裝CUDATool

Docker利用Linux內核特性,提供高效、隔離的應用運行環境。其工作原理如下:1. 鏡像作為只讀模板,包含運行應用所需的一切;2. 聯合文件系統(UnionFS)層疊多個文件系統,只存儲差異部分,節省空間並加快速度;3. 守護進程管理鏡像和容器,客戶端用於交互;4. Namespaces和cgroups實現容器隔離和資源限制;5. 多種網絡模式支持容器互聯。理解這些核心概念,才能更好地利用Docker。

在CentOS系統上啟用PyTorchGPU加速,需要安裝CUDA、cuDNN以及PyTorch的GPU版本。以下步驟將引導您完成這一過程:CUDA和cuDNN安裝確定CUDA版本兼容性:使用nvidia-smi命令查看您的NVIDIA顯卡支持的CUDA版本。例如,您的MX450顯卡可能支持CUDA11.1或更高版本。下載並安裝CUDAToolkit:訪問NVIDIACUDAToolkit官網,根據您顯卡支持的最高CUDA版本下載並安裝相應的版本。安裝cuDNN庫:前

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

在CentOS下選擇PyTorch版本時,需要考慮以下幾個關鍵因素:1.CUDA版本兼容性GPU支持:如果你有NVIDIAGPU並且希望利用GPU加速,需要選擇支持相應CUDA版本的PyTorch。可以通過運行nvidia-smi命令查看你的顯卡支持的CUDA版本。 CPU版本:如果沒有GPU或不想使用GPU,可以選擇CPU版本的PyTorch。 2.Python版本PyTorch

MinIO對象存儲:CentOS系統下的高性能部署MinIO是一款基於Go語言開發的高性能、分佈式對象存儲系統,與AmazonS3兼容。它支持多種客戶端語言,包括Java、Python、JavaScript和Go。本文將簡要介紹MinIO在CentOS系統上的安裝和兼容性。 CentOS版本兼容性MinIO已在多個CentOS版本上得到驗證,包括但不限於:CentOS7.9:提供完整的安裝指南,涵蓋集群配置、環境準備、配置文件設置、磁盤分區以及MinI

在CentOS系統上進行PyTorch分佈式訓練,需要按照以下步驟操作:PyTorch安裝:前提是CentOS系統已安裝Python和pip。根據您的CUDA版本,從PyTorch官網獲取合適的安裝命令。對於僅需CPU的訓練,可以使用以下命令:pipinstalltorchtorchvisiontorchaudio如需GPU支持,請確保已安裝對應版本的CUDA和cuDNN,並使用相應的PyTorch版本進行安裝。分佈式環境配置:分佈式訓練通常需要多台機器或單機多GPU。所
