【Pytroch】基于K鄰近算法的數據分類預測(Excel可直接替換數據)

【Pytroch】基于K鄰近算法的數據分類預測(Excel可直接替換數據)

  • 1.模型原理
  • 2.數學公式
  • 3.文件結構
  • 4.Excel數據
  • 5.下載地址
  • 6.完整代碼
  • 7.運行結果

1.模型原理

K最近鄰(K-Nearest Neighbors,簡稱KNN)是一種簡單但常用的機器學習算法,用于分類和回歸問題。它的核心思想是基于已有的訓練數據,通過測量樣本之間的距離來進行分類預測。在實現KNN算法時,可以使用PyTorch來進行計算和操作。

下面是使用PyTorch實現KNN算法的一般步驟:

  1. 準備數據集:首先,需要準備訓練數據集,包括樣本特征和對應的標簽。

  2. 計算距離:對于每個待預測的樣本,計算它與訓練數據集中每個樣本的距離。常見的距離度量包括歐氏距離、曼哈頓距離等。

  3. 排序與選擇:將計算得到的距離按照從小到大的順序進行排序,并選擇距離最近的K個樣本。

  4. 投票或平均:對于分類問題,選擇K個樣本中出現最多的類別作為預測結果;對于回歸問題,選擇K個樣本的標簽的平均值作為預測結果。

2.數學公式

當使用K最近鄰(KNN)算法進行數據分類預測時,以下是其基本原理的數學描述:

  1. 距離度量:假設我們有一個訓練數據集 D D D,其中包含 n n n 個樣本。每個樣本 x i x_i xi? 都有 m m m 個特征,可以表示為 x i = ( x i 1 , x i 2 , … , x i m ) x_i = (x_{i1}, x_{i2}, \ldots, x_{im}) xi?=(xi1?,xi2?,,xim?)。對于一個待預測的樣本 x new x_{\text{new}} xnew?,我們需要計算它與訓練集中每個樣本的距離。常見的距離度量方式包括歐氏距離(Euclidean Distance)和曼哈頓距離(Manhattan Distance)等:

    • 歐氏距離: d ( x i , x new ) = ∑ j = 1 m ( x i j ? x new , j ) 2 d(x_i, x_{\text{new}}) = \sqrt{\sum_{j=1}^m (x_{ij} - x_{\text{new},j})^2} d(xi?,xnew?)=j=1m?(xij??xnew,j?)2 ?

    • 曼哈頓距離: d ( x i , x new ) = ∑ j = 1 m ∣ x i j ? x new , j ∣ d(x_i, x_{\text{new}}) = \sum_{j=1}^m |x_{ij} - x_{\text{new},j}| d(xi?,xnew?)=j=1m?xij??xnew,j?

  2. 排序與選擇:計算完待預測樣本與所有訓練樣本的距離后,我們將距離按照從小到大的順序排序。然后選擇距離最近的 K K K 個訓練樣本。

  3. 投票或平均:對于分類問題,我們可以統計這 K K K 個樣本中每個類別出現的次數,然后選擇出現次數最多的類別作為預測結果。這就是所謂的“投票法”:

    • y ^ = argmax c ∑ i = 1 K I ( y i = c ) \hat{y} = \text{argmax}_{c} \sum_{i=1}^{K} I(y_i = c) y^?=argmaxc?i=1K?I(yi?=c)

    其中, y ^ \hat{y} y^? 是預測的類別, y i y_i yi? 是第 i i i 個樣本的真實類別, c c c 是類別。

    對于回歸問題,我們可以選擇 K K K 個樣本的標簽的平均值作為預測結果。

總結起來,K最近鄰算法的基本原理是通過測量樣本之間的距離來進行分類預測。對于分類問題,通過投票法確定預測類別;對于回歸問題,通過取標簽的平均值來預測數值。在實際應用中,需要選擇合適的距離度量和適當的 K K K 值,以及進行必要的數據預處理和特征工程。

3.文件結構

在這里插入圖片描述

iris.xlsx						% 可替換數據集
Main.py							% 主函數

4.Excel數據

在這里插入圖片描述

5.下載地址

- Excle資源下載地址

6.完整代碼

import torch
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as pltdef knn(X_train, y_train, X_test, k=5):X_train = torch.tensor(X_train, dtype=torch.float32)X_test = torch.tensor(X_test, dtype=torch.float32)y_train = torch.tensor(y_train, dtype=torch.long)predictions = []for i in range(X_test.shape[0]):distances = torch.sum((X_train - X_test[i]) ** 2, dim=1)_, indices = torch.topk(distances, k, largest=False)  # 獲取距離最小的k個鄰居的索引knn_labels = y_train[indices]pred = torch.mode(knn_labels).values  # 投票選出標簽predictions.append(pred.item())return predictionsdef plot_confusion_matrix(conf_matrix, classes):plt.figure(figsize=(8, 6))plt.imshow(conf_matrix, cmap=plt.cm.Blues, interpolation='nearest')plt.title("Confusion Matrix")plt.colorbar()tick_marks = np.arange(len(classes))plt.xticks(tick_marks, classes)plt.yticks(tick_marks, classes)plt.xlabel("Predicted Label")plt.ylabel("True Label")plt.tight_layout()plt.show()def plot_predictions_vs_true(y_true, y_pred):plt.figure(figsize=(10, 6))plt.plot(y_true, 'go', label='True Labels')plt.plot(y_pred, 'rx', label='Predicted Labels')plt.title("True Labels vs Predicted Labels")plt.xlabel("Sample Index")plt.ylabel("Class Label")plt.legend()plt.show()def main():# 讀取Data.xlsx文件并加載數據data = pd.read_excel("iris.xlsx")# 劃分特征值和標簽features = data.iloc[:, :-1].valueslabels = data.iloc[:, -1].values# 將數據集拆分為訓練集和測試集X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)y_pred = knn(X_train, y_train, X_test, k=5)print("真實值:",y_test)print("預測值:", y_pred)accuracy = accuracy_score(y_test, y_pred)print("訓練集準確率:{:.2%}".format(accuracy))conf_matrix = confusion_matrix(y_test, y_pred)print("混淆矩陣:")print(conf_matrix)classes = np.unique(y_test)plot_confusion_matrix(conf_matrix, classes)plot_predictions_vs_true(y_test, y_pred)if __name__ == "__main__":main()

7.運行結果

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

Redis基礎學習

目錄 第一章、Redis數據庫的下載和安裝1.1)nosql數據庫和 Redis 介紹1.2)Windows中下載安裝Redis數據庫1.3)Linux中安裝Redis數據庫1.4)Linux中啟動redis1.5)Linux中關閉redis 第二章、三種Redis客戶端連接Redis數據庫…

安全遠控如何設置?揭秘ToDesk、TeamViewer 、向日葵安全遠程防御大招

寫在前面一、遠程控制:安全性不可忽略二、遠控軟件安全設置實測? ToDesk? TeamViewer? 向日葵 三、遠控安全的亮點功能四、個人總結與建議 寫在前面 說到遠程辦公,相信大家都不陌生。遠程工作是員工在家中或者其他非辦公場所上班的一種工作模式&…

傳輸層協議

傳輸層協議 再談端口號端口號范圍劃分認識知名端口號兩個問題netstatpidof UDP協議UDP協議端格式UDP的特點面向數據報UDP的緩沖區UDP使用注意事項基于UDP的應用層協議 TCP協議TCP協議段格式確認應答(ACK)機制超時重傳機制連接管理機制理解 CLOSE_WAIT 狀態理解TIME_WAIT狀態解決…

修改el-select和el-input樣式;修改element-plus的下拉框el-select樣式

修改el-select樣式 .select_box{// 默認placeholder:deep .el-input__inner::placeholder {font-size: 14px;font-weight: 500;color: #3E534F;}// 默認框狀態樣式更改:deep .el-input__wrapper {height: 42px;background-color: rgba(0,0,0,0)!important;box-shadow: 0 0 0 …

OptaPlanner筆記6 N皇后

N 個皇后 問題描述 將n個皇后放在n大小的棋盤上,沒有兩個皇后可以互相攻擊。 最常見的 n 個皇后謎題是八個皇后謎題,n 8: 約束: 使用 n 列和 n 行的棋盤。在棋盤上放置n個皇后。沒有兩個女王可以互相攻擊。女王可以攻擊同一水…

如何做好一名網絡工程師?具體實踐?

預防問題 – 資格與認證 在安裝線纜或升級網絡時測試線纜是預防問題的有效方式。對已安裝布線進行測試的方法有兩種。 資格測試確定布線是否有資格執行某些操作 — 換言之,支持特定網絡速度或應用。盡管“通過”認證測試也表明按標準支持某一網絡速度或應用的能力…

Redux - Redux在React函數式組件中的基本使用

文章目錄 一,簡介二,安裝三,三大核心概念Store、Action、Reducer3.1 Store3.2 Reducer3.3 Action 四,開始函數式組件中使用4.1,引入store4.1,store.getState()方法4.3,store.dispatch()方法4.4&…

cookie和session的區別及原理

Cookie概念 在瀏覽某些 網站 時,這些網站會把 一些數據存在 客戶端 , 用于使用網站 等跟蹤用戶,實現用戶自定義 功能. 是否設置過期時間: 如果不設置 過期時間,則表示這個 Cookie生命周期為 瀏覽器會話期間 , 只要關閉瀏覽器,cookie就消失了. 這個生命期為瀏覽會話期的cookie,就…

其他行業跳槽轉入計算機領域簡單看法

其他行業跳槽轉入計算機領域簡單看法 本人選擇從以下幾個方向談談自己的想法和觀點。 如何規劃才能實現轉碼 自我評估和目標設定:首先,你需要評估自己的技能和興趣,確定你希望在計算機領域從事的具體職位或領域。這有助于你更好地規劃學習路…

深入了解 Rancher Desktop 設置

Rancher Desktop 設置的全面概述 Rancher Desktop 擁有方便、強大的功能,是最佳的開發者工具之一,也是在本地構建和部署 Kubernetes 的最快捷方式。 本文將介紹 Rancher Desktop 的功能和特性,以及 Rancher Desktop 作為容器管理平臺和本地…

人工智能原理(2)

目錄 一、知識與知識表示 1、知識 2、知識表示 3、知識表示方法 二、謂詞邏輯表示法 1、命題邏輯 2、謂詞邏輯 三、產生式表達法 1、知識的表示方法 2、產生式系統組成 3、推理方式 4、產生式表示法特點 四、語義網絡 1、概念及結構 2、語義網絡的基本語義聯系 …

zookeeper案例

目錄 案例一:服務器動態上下線 服務端: (1)先獲取zookeeper連接 (2)注冊服務器到zookeeper集群: (3)業務邏輯(睡眠): 服務端代碼…

Java+Excel+POI+testNG基于數據驅動做一個簡單的接口測試【杭州多測師_王sir】

一、創建一個apicases.xlsx放入到eclipse的resource里面&#xff0c;然后refresh刷新一下 二、在pom.xml文件中加入poi和testng的mvn repository、然后在eclipse的對應目錄下放入features和plugins&#xff0c;重啟eclipse就可以看到testNG了 <!--poi excel解析 --><d…

運維監控學習筆記3

DELL的IPMI頁面的登錄&#xff1a; 風扇的狀態&#xff1a; 電源溫度&#xff1a;超過70度就告警&#xff1a; 日志信息&#xff1a; 可以看到更換過磁盤。 iDRAC的設置 虛擬控制臺&#xff1a;啟動遠程控制臺&#xff1a; 可以進行遠程控制。 機房工程師幫我們接遠程控制&…

【云原生】kubernetes中容器的資源限制

目錄 1 metrics-server 2 指定內存請求和限制 3 指定 CPU 請求和限制 資源限制 在k8s中對于容器資源限制主要分為以下兩類: 內存資源限制: 內存請求&#xff08;request&#xff09;和內存限制&#xff08;limit&#xff09;分配給一個容器。 我們保障容器擁有它請求數量的…

【云原生】K8S集群

目錄 一、調度約束1.1 POT的創建過程1.1調度過程 二、指定節點調度2.1 通過標簽選擇節點 三、親和性3.1requiredDuringSchedulingIgnoredDuringExecution&#xff1a;硬策略3.1 preferredDuringSchedulingIgnoredDuringExecution&#xff1a;軟策略3.3Pod親和性與反親和性3.4使…

(2)原神角色數據分析-2

功能一&#xff1a; 得到某個屬性的全部角色&#xff0c;將其封裝在class中 """各元素角色信息&#xff1a;一對多""" from pandas import DataFrame, Series import pandas as pd import numpy as npclass FindType:# 自動執行&#xff0c;將…

山東布谷科技直播平臺搭建游戲開發技術分享:數據存儲的重要意義

在市場上的熱門的直播平臺中&#xff0c;有很多小程序為用戶提供各種各樣的功能&#xff0c;這其中就有很多游戲小程序&#xff0c;當今社會獨生子女眾多&#xff0c;很多作為獨生子女的用戶都會去選擇一個能夠社交互動的APP來填補內心的空虛&#xff0c;而直播平臺的實時互動的…

SAP 選擇屏幕組件名描述翻譯時字符長度不夠問題處理

問題&#xff1a;有時候我們在開發report程序的時候&#xff0c;要求程序顯示支持中英文&#xff0c;如果程序是在中文環境下開發的時候&#xff0c;需要進行翻譯處理&#xff0c;但是我們發現選擇屏幕上的組件的描述支持的默認長度是30位&#xff0c;如果超過該如何處理呢 解…

《路由與交換技術》讀書筆記

小小感悟 工作近3年&#xff0c;基本沒去看路由交換相關書籍&#xff0c;趁著搬家后&#xff0c;周末閑暇時間&#xff0c;快速看了一遍《路由與交換技術》&#xff0c;溫習了一遍&#xff0c;很有收獲&#xff0c;以后還是要多花時間看看其他類型的書。 讀書筆記 1.1 移動通…