【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(xijxnew,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=1mxijxnew,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^=argmaxci=1KI(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.mzph.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&…

深入了解 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使…

山东布谷科技直播平台搭建游戏开发技术分享:数据存储的重要意义

在市场上的热门的直播平台中&#xff0c;有很多小程序为用户提供各种各样的功能&#xff0c;这其中就有很多游戏小程序&#xff0c;当今社会独生子女众多&#xff0c;很多作为独生子女的用户都会去选择一个能够社交互动的APP来填补内心的空虚&#xff0c;而直播平台的实时互动的…

SAP 选择屏幕组件名描述翻译时字符长度不够问题处理

问题&#xff1a;有时候我们在开发report程序的时候&#xff0c;要求程序显示支持中英文&#xff0c;如果程序是在中文环境下开发的时候&#xff0c;需要进行翻译处理&#xff0c;但是我们发现选择屏幕上的组件的描述支持的默认长度是30位&#xff0c;如果超过该如何处理呢 解…

构建一个LLM应用所需的所有信息

一、说明 您是否对大型语言模型&#xff08;LLM&#xff09;的潜力感兴趣&#xff0c;并渴望创建您的第一个基于LLM的应用程序&#xff1f;或者&#xff0c;也许您是一位经验丰富的开发人员&#xff0c;希望简化工作流程&#xff1f;看看DemoGPT就是您的最佳选择。该工具旨在简…

【软件测试】Linux环境下Docker搭建+Docker搭建MySQL服务(详细)

目录&#xff1a;导读 前言 一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Linux之docker搭…

CDN(内容分发网络)

CDN的全称是 Content Delivery Network, 即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发、调度等功能模块&#xff0c;使用户就近获取所需内容&#xff0c;降低网络拥塞&a…

详谈MongoDB的那些事

概念区分 什么是关系型数据库 关系型数据库&#xff08;Relational Database&#xff09;是一种基于关系模型的数据库管理系统&#xff08;DBMS&#xff09;。在关系型数据库中&#xff0c;数据以表格的形式存储&#xff0c;表格由行和列组成&#xff0c;行表示数据记录&…