【Sklearn】基于K邻近算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于K邻近算法的数据分类预测(Excel可直接替换数据)

  • 1.模型原理
      • 模型原理:
      • 数学模型:
  • 2.模型参数
  • 3.文件结构
  • 4.Excel数据
  • 5.下载地址
  • 6.完整代码
  • 7.运行结果

1.模型原理

K最近邻(K-Nearest Neighbors,KNN)是一种基本的监督学习算法,用于分类和回归任务。其模型原理如下:

模型原理:

对于分类任务,KNN的原理可以概括为以下几个步骤:

  1. 训练阶段: 将训练数据集中的每个数据点与其标签一起存储。这些数据点和标签构成了训练样本。

  2. 预测阶段: 当需要对新的数据点进行分类时,KNN算法执行以下步骤:

    • 计算测试数据点与训练数据集中每个点之间的距离,使用所选择的距离度量(如欧氏距离)。

    • 从训练数据集中选择K个与测试数据点距离最近的数据点,这些数据点就是测试数据点的“最近邻居”。

    • 根据这K个最近邻居的标签,预测测试数据点的标签。对于分类任务,可以通过多数表决的方式,即选择K个邻居中出现最多次的标签作为预测标签。

数学模型:

假设我们有一个训练数据集 D D D,包含 N N N 个样本,每个样本有 d d d 个特征。在分类任务中,每个样本都有一个标签。

  • 训练数据集: D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } D = \{(x_1, y_1), (x_2, y_2), ..., (x_N, y_N)\} D={(x1,y1),(x2,y2),...,(xN,yN)},其中 x i x_i xi 是一个 d d d 维特征向量, y i y_i yi 是样本 x i x_i xi 对应的标签。

对于一个新的测试数据点 x x x,KNN的分类过程可以用以下公式表示:

y ^ = argmax y ∑ i = 1 K w i ⋅ I ( y i = y ) \hat{y} = \text{argmax}_y \sum_{i=1}^{K} w_i \cdot I(y_i = y) y^=argmaxyi=1KwiI(yi=y)

其中:

  • y ^ \hat{y} y^ 是测试数据点的预测标签。
  • y i y_i yi 是第 i i i 个最近邻居的标签。
  • w i w_i wi 是第 i i i 个最近邻居的权重(通常为1或距离的倒数)。
  • I ( y i = y ) I(y_i = y) I(yi=y) 是指示函数,如果 y i = y y_i = y yi=y,则为1,否则为0。

KNN算法在预测时需要选择合适的 K K K 值、距离度量、权重等参数。较小的 K K K 值会导致模型更容易受到噪声影响,而较大的 K K K 值可能导致决策边界不够灵活。距离度量的选择和权重的设置也会影响算法的性能。

当需要对新的数据点进行分类时,KNN算法执行以下步骤:

  1. 计算距离: 对于测试数据点 x x x,计算它与训练数据集中每个数据点 x i x_i xi 之间的距离。可以使用欧氏距离(Euclidean distance)等距离度量方法:

    欧氏距离公式: d ( x , x i ) = ∑ j = 1 d ( x j − x i j ) 2 d(x, x_i) = \sqrt{\sum_{j=1}^{d} (x_j - x_{ij})^2} d(x,xi)=j=1d(xjxij)2

    其中, d d d 是数据的维度, x j x_j xj 是测试数据点的第 j j j 个特征值, x i j x_{ij} xij 是训练数据点 x i x_i xi 的第 j j j 个特征值。

  2. 选择最近邻: 从训练数据集中选择距离测试数据点最近的 K K K 个数据点,这些数据点就是测试数据点的最近邻居。

  3. 多数表决: 对于分类任务,根据最近邻居的标签进行多数表决,选择出现次数最多的标签作为测试数据点的预测标签。

  4. 欧氏距离公式:
    d ( x , x i ) = ∑ j = 1 d ( x j − x i j ) 2 d(x, x_i) = \sqrt{\sum_{j=1}^{d} (x_j - x_{ij})^2} d(x,xi)=j=1d(xjxij)2

在这个公式中, d d d 是数据的维度, x j x_j xj 是测试数据点的第 j j j 个特征值, x i j x_{ij} xij 是训练数据点 x i x_i xi 的第 j j j 个特征值。

请注意,上述描述和公式仅概括了KNN算法的基本原理。在实际应用中,还需要根据具体问题选择合适的距离度量、权重等参数,以及处理距离相等的情况等。

2.模型参数

KNeighborsClassifier是Scikit-Learn中用于K最近邻分类的类。以下是部分常用的参数列表:

  1. n_neighbors: K值,表示用于预测的最近邻居的数量。
  2. weights: 用于预测的近邻的权重,可以是’uniform’(均匀权重)或’distance’(根据距离进行加权)。
  3. algorithm: 用于计算最近邻的算法,可以是’auto’(根据数据自动选择),‘ball_tree’,‘kd_tree’,‘brute’。
  4. leaf_size: 在使用’ball_tree’或’kd_tree’算法时,指定叶子节点的大小。
  5. p: 距离度量参数,1表示使用曼哈顿距离,2表示使用欧氏距离,其他值表示使用闵可夫斯基距离。
  6. metric: 距离度量函数,默认为’minkowski’。可以是各种内置度量,或者自定义距离度量函数。
  7. n_jobs: 并行计算的任务数量,-1表示使用所有可用的CPU核心。
  8. algorithm: 用于计算最近邻的算法,可以是’auto’(自动选择),‘ball_tree’,‘kd_tree’,‘brute’。
  9. leaf_size: 在使用’ball_tree’或’kd_tree’算法时,指定叶子节点的大小。
  10. metric_params: 距离度量的附加参数。

以下是使用KNeighborsClassifier的例子:

from sklearn.neighbors import KNeighborsClassifier# 创建K最近邻模型,设置K值为5,使用欧氏距离,使用均匀权重
model = KNeighborsClassifier(n_neighbors=5, weights='uniform', p=2)

请注意,上述示例只是一部分参数,还有其他可用参数未列出。您可以根据需求在创建模型时调整这些参数。

3.文件结构

在这里插入图片描述

iris.xlsx						% 可替换数据集
Main.py							% 主函数

4.Excel数据

在这里插入图片描述

5.下载地址

- 资源下载地址

6.完整代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as snsdef knn_classification(data_path, test_size=0.2, random_state=42, n_neighbors=3):# 加载数据data = pd.read_excel(data_path)# 分割特征和标签X = data.iloc[:, :-1]  # 所有列除了最后一列y = data.iloc[:, -1]   # 最后一列# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_state)# 创建K最近邻模型# 1. ** n_neighbors: ** K值,表示用于预测的最近邻居的数量。# 2. ** weights: ** 用于预测的近邻的权重,可以是'uniform'(均匀权重)或'distance'(根据距离进行加权)。# 3. ** algorithm: ** 用于计算最近邻的算法,可以是'auto'(根据数据自动选择),'ball_tree','kd_tree','brute'。# 4. ** leaf_size: ** 在使用'ball_tree'或'kd_tree'算法时,指定叶子节点的大小。# 5. ** p: ** 距离度量参数,1表示使用曼哈顿距离,2表示使用欧氏距离,其他值表示使用闵可夫斯基距离。# 6. ** metric: ** 距离度量函数,默认为'minkowski'。可以是各种内置度量,或者自定义距离度量函数。# 7. ** n_jobs: ** 并行计算的任务数量,-1表示使用所有可用的CPU核心。# 8. ** algorithm: ** 用于计算最近邻的算法,可以是'auto'(自动选择),'ball_tree','kd_tree','brute'。# 9. ** leaf_size: ** 在使用'ball_tree'或'kd_tree'算法时,指定叶子节点的大小。# 10. ** metric_params: ** 距离度量的附加参数。# 创建K最近邻模型,设置K值为5,使用欧氏距离,使用均匀权重model = KNeighborsClassifier(n_neighbors=5, weights='uniform', p=2)# 在训练集上训练模型model.fit(X_train, y_train)# 在测试集上进行预测y_pred = model.predict(X_test)# 计算准确率accuracy = accuracy_score(y_test, y_pred)return confusion_matrix(y_test, y_pred), y_test.values, y_pred, accuracyif __name__ == "__main__":# 使用函数进行分类任务data_path = "iris.xlsx"confusion_mat, true_labels, predicted_labels, accuracy = knn_classification(data_path, n_neighbors=5)print("真实值:", true_labels)print("预测值:", predicted_labels)print("准确率:{:.2%}".format(accuracy))# 绘制混淆矩阵plt.figure(figsize=(8, 6))sns.heatmap(confusion_mat, annot=True, fmt="d", cmap="Blues")plt.title("Confusion Matrix")plt.xlabel("Predicted Labels")plt.ylabel("True Labels")plt.show()# 用圆圈表示真实值,用叉叉表示预测值# 绘制真实值与预测值的对比结果plt.figure(figsize=(10, 6))plt.plot(true_labels, 'o', label="True Labels")plt.plot(predicted_labels, 'x', label="Predicted Labels")plt.title("True Labels vs Predicted Labels")plt.xlabel("Sample Index")plt.ylabel("Label")plt.legend()plt.show()

7.运行结果

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/89494.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建网站并内网穿透实现公网访问本地SQL Server数据库【无公网IP内网穿透】

文章目录 前言1. 安装网站运行和发布必备软件2. 安装PHPStudy3. 安装wordpress4. 进入wordpress安装程序,进行网页编辑和设置5. 安装URL插件6. 安装Cpolar7. 创建自己的数据隧道 前言 在普通电脑用户看来,建立自己的网站总是一件高大上的事情&#xff0…

软件测试四年,总结下功能测试用例设计思路

我们为什么要写好一份测试用例呢?测试同学应该都知道测试用例的重要性,测试用例就是我们测试的依据,也是测试过程中不能缺少的测试文档。 一、用例编写规范目的: 1、提高测试用例的可读性,可执行性、合理性。 2、测…

SpringBoot对一个URL通过method(GET、POST、PUT、DELETE)实现增删改查操作

目录 1. rest风格基础2. 开启方法3. 实战练习 1. rest风格基础 我们都知道GET、POST、PUT、DELETE分别对应查、增、改、删除 虽然Postman这些工具可以直接发送GET、POST、PUT、DELETE请求。但是RequestMapping并不支持PUT和DELETE请求操作。需要我们手动开启 2. 开启方法 P…

CSS 盒模型是什么?它包含哪些属性?标准盒模型/怪异盒模型

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 盒模型⭐ 标准盒模型⭐ 怪异盒模型⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感…

微服务Eureka注册中心

目录 一、Eureka的结构和作用 二、搭建eureka-server 三、服务注册 四、服务发现 假如我们的服务提供者user-service部署了多个实例,如图: 存在的问题: order-service在发起远程调用的时候,该如何得知user-service实例的ip地址…

关于APP备案、小程序备案的问题,如何备案?

近日,工信部发布了关于开展移动互联网应用程序备案工作的通知。为落实相关法律法规要求,促进互联网行业规范健康发展,进一步做好移动互联网信息服务管理,现组织开展移动互联网应用程序(以下简称 APP)备案工…

Python Opencv实践 - 图像平移

import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR)#图像平移 #cv.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) # M是仿射变换矩阵,对于平移来说M是一…

微信小程序实现双向滑动快捷选择价格(价格区间)

实现样子 提示:效果可以自己自定义,自己将文字样式更改为自己项目属性即可 实现达到方法 1、左边为最低价,右边为最高价格,可以拖动左边最低价选择价格。拖动右边为最高价。 2、当两个价格重合时,继续拖动&#xff0…

OPENCV C++(十)gramm矫正+直方图均衡化

两者都是只对单通道使用,对多通道的话 就需要分离通道处理再合并通道 两种方法,第一个要运算次数太多了,第二个只需要查表 伽马矫正函数,这里用第二种方法,且写法有点高级 int gammaCorrection(cv::Mat srcMat, cv::…

RedisDesktopManage

RDM 简介下载安装 简介 RedisDesktopManager(RDM)是一个开源的跨平台图形界面工具,用于管理和操作 Redis 数据库。它提供了一个用户友好的界面,使用户能够轻松地连接、浏览、查询和修改 Redis 数据,而无需使用命令行界…

数据结构入门:队列

目录 文章目录 前言 1.队列 1.1 队列的概念及结构 1.2 队列的实现 1.2.1 队列的定义 1.2.2队列的初始化 1.2.3 入队 1.2.4 判空 1.2.5 出队 1.2.6 队头队尾数据 1.2.7 队列长度 1.2.8 队列销毁 总结 前言 队列,作为一种重要的数据结构,在计算机科学中扮演…

Web菜鸟教程 - Swagger实现自动生成文档

如果是一个人把啥都开发了,那用不到Swagger-UI,但一般情况是前后端分离的,所以就需要告诉前端开发人员都有哪些接口,传入什么参数,怎么调用,返回什么。有了Swagger-UI就能把这部分文档编写的业务给省去了。…

Android学习之路(2) 设置视图

一、设置视图宽高 ​ 在Android开发中,可以使用LayoutParams类来设置视图(View)的宽度和高度。LayoutParams是一个用于布局的参数类,用于指定视图在父容器中的位置和大小。 ​ 下面是设置视图宽度和高度的示例代码: …

[保研/考研机试] KY235 进制转换2 清华大学复试上机题 C++实现

题目链接&#xff1a; KY235 进制转换2 https://www.nowcoder.com/questionTerminal/ae4b3c4a968745618d65b866002bbd32 描述 将M进制的数X转换为N进制的数输出。 输入描述&#xff1a; 输入的第一行包括两个整数&#xff1a;M和N(2<M,N<36)。 下面的一行输入一个数…

面试攻略,Java 基础面试 100 问(十二)

如何将字符串转换为基本数据类型&#xff1f; 调用基本数据类型对应的包装类中的方法 parseXXX(String)或 valueOf(String)即可返回相应基本类型&#xff1b; 如何将基本数据类型转换为字符串&#xff1f; 一种方法是将基本数据类型与空字符串&#xff08;””&#xff09;连…

精挑细选的几个宝藏软件

是不是感觉你的电脑里面永远都缺少一款软件&#xff1f;每次想要使用某个功能的时候总是不能找到合适的&#xff0c;还要先去网上找&#xff0c;小编给大家分享几款超级实用的软件&#xff0c;建议低调收藏哦~ Proxyee-down/下载工具 proxyee-down是一款免费开源的http下载工…

聊聊看React和Vue的区别

Vue 更适合小项目&#xff0c;React 更适合大公司大项目&#xff1b; Vue 的学习成本较低&#xff0c;很容易上手&#xff0c;但项目质量不能保证...... 真的是这样吗&#xff1f;借助本篇文章&#xff0c;我们来从一些方面的比较来客观的去看这个问题。 论文档的丰富性 从两个…

hutool 导出复杂表头excel

假如已这样的表头导出数据 1.把包含表头的excel添加到项目资源目录 2.编写代码读取表头所在sheet,并且加入需导出的数据 /*** 导出excel*/public static void downloadExcel(List<List<Object>> list, HttpServletResponse response) throws IOException {/*Strin…

pc端与flutter通信失效, Method not found

报错情况描述&#xff1a;pc端与flutter通信&#xff0c;ios端能实现通信&#xff0c;安卓端通信报错 报错通信代码&#xff1a; //app消息通知window.callbackName function (res) {window?.jsBridge && window.jsBridge?.postMessage(JSON.stringify(res), "…