当前位置: 首页 > news >正文

机器学习——KNN算法

1、:前提知识

  • KNN算法是机器学习算法中用于分类或者回归的算法,KNN全称为K nearest neighbour(又称为K-近邻算法)

  • 原理:K-近邻算法采用测量不同特征值之间的距离的方法进行分类。

  • 优点:精度高

  • 缺点:时间和空间复杂度高

  • K近邻算法思想:有N个样本分布在m个类别中,要判定第x个样本为什么类别,就要求出x到N个样本每个样本的距离集合,从中找出K个最近的样本,然后通过k个样本的比例判断x所属类别,例如在k个样本中第一类占比较多,就判定x是第一类数据。注意:计算x到N个样本之间的距离方法有两种,第一种是曼哈顿距离,第二种是欧式距离,他们的计算如下:
    在这里插入图片描述
    可以看出,曼哈顿距离计算复杂度较低,计算速度快。

  • 实现方法:基于谷歌公司开发的第三方python库sklearn

  • 实现步骤:

    • 1、导入numpy、pandas、matplotlib、from sklearn.neighbors import KNeighborsClassifier第三方库
    • 2、导入原始数据(导入数据后可以通过散点图进行数据可视化简单了解下数据)
    • 3、将数据划分为训练数据(x_train、y_train)和测试数据(x_test、y_test),注意:在KNN中输入数据x为二维数据,输出数据y为一维数据。(注意:二维数据代表数据只能有行和列两个维度,但x可以有多个,x也叫做特征)
    • 4、设定KNN算法参数,引入KNN模型
    • 5、通过fit函数输入训练数据,训练KNN模型
    • 6、通过测试数据测试KNN模型
    • 7、计算模型准确率

2、案例:

  • 我有一份原始数据,数据中有两个变量,分别为“武打镜头”和“接吻镜头”,通过这两个变量可以判断这部影片为动作片还是爱情片,规则就是:武打镜头大于接吻镜头为动作片,武打镜头小于接吻镜头为爱情片,原始数据如下:
    在这里插入图片描述
  • 代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 导入KNN分类库
from sklearn.neighbors import KNeighborsClassifier# 1、导入数据
movie = pd.read_excel('./tests.xlsx',sheet_name="Sheet2")
# 2、数据可视化
plt.scatter(movie.loc[:,'武打镜头'],movie.loc[:,'接吻镜头'])
plt.show
# 3、训练数据赋值,x(二维)、y(一维)
x_train = movie.loc[:,['武打镜头','接吻镜头']]
y_train = movie.loc[:,'分类情况']
print(type(x_train),type(y_train))
# 4、设置KNN参数(近邻数量为5,距离计算方法为曼哈顿),引入KNN模型
KNN = KNeighborsClassifier(n_neighbors=5,p=1)
# 5、训练模型
KNN.fit(x_train,y_train)
# 6、设置测试数据测试训练完的KNN模型
x_test = np.array([[30,2],[3,36],[2,15],[30,2]])
y_test = np.array(['动作片','爱情片','爱情片','动作片'])
y_pred = KNN.predict(x_test)
print(y_pred)
# 7、计算测试集准确率(accuracy)
KNN.score(x_test,y_test)

3、鸢尾花分类任务实战:

  • 1、学习sklearn中自带的数据集调用方法
    • 导入鸢尾花数据集:from sklearn.datasets import load_iris(同过tab键代码补齐的方法就能靠大概记忆输入此行代码)
    • 使用数据集:load_iris(),如下所示为调用结果,结果为字典形式,其中data为数据键,对应的值为array二维数组(150行*4列),其中第一列特征为花萼的长度(sepal length (cm)),第二列特征为花萼的宽度’sepal width (cm)‘,第三列特征为花瓣的长度’petal length (cm)’,第四列特征为花瓣的宽度 ‘petal width (cm)’。target键对应的为150组数据对应的分类标签,其中0代表’setosa’鸢尾花,1 代表’versicolor’鸢尾花, 2代表’virginica’鸢尾花。其他键表示的就是一些数据集的相关信息。
  • 2、通过字典调用方式获取数据集中的相关数据,再根据pandas或者numpy处理数据。
# 获取输入数据
data = s_data['data']
pd.DataFrame(data)
# 获取输出数据
target = s_data['target']
  • 3、将数据集划分为训练数据和测试数据(使用sklearn库中model_selection模块中的train_test_split函数)
# 导入sklearn自带的切分训练数据和测试数据的包
from sklearn.model_selection import train_test_split# 将数据切分为训练集输入、训练集输出、测试集输入、测试集输出
# test_size的参数如果是整数就会从所有数据中取多少条作为测试数据
# test_size的参数如果是0~1的小数就会从所有数据中按比例取多少条作为测试数据
# random_state参数可以让每次数据切分都一样
x_train, x_test, y_train, y_test = train_test_split(data,target,test_size=10)
  • 4、导入KNN模型,训练数据,并测试分类效果
# 获取KNN算法
KNN = KNeighborsClassifier()
# 训练KNN算法
model = KNN.fit(x_train,y_train)
# 测试模型分类效果
model.predict(x_test)
print(y_test)
# 计算分类准确度
model.score(x_test,y_test)

4、补充

  • 1、DataFrame数据可以直接用matplotlib中的plot画出数据的折线图,下面的例子是画出鸢尾花数据集的特征数据折线图
s_data = load_iris()
# 获取输入数据
data = s_data['data']
data = pd.DataFrame(data,columns=s_data['feature_names'])
# 用DataFrame直接画图查看数据集
data.plot()

在这里插入图片描述

  • 2、绘制分类分界图:目的是将一个数据集中的数据放在一个坐标系中,然后让除了数据以外坐标系中其他区域也显示分类情况
# 1、先划分坐标系
x = np.linspace(data2.iloc[:, 0].min(), data2.iloc[:, 0].max(), 1000)   # 把x等分成1000份
y = np.linspace(data2.iloc[:, 1].min(), data2.iloc[:, 1].max(), 1000)   # 把y等分成1000份X, Y = np.meshgrid(x, y) # 按行复制y个x,按列复制x个y
XY = np.c_[X.ravel(), Y.ravel()] # 将x扁平化,将y扁平化,再一对一组合,最终XY形状为(1000000, 2)
# 用KNN模型预测
knn = KNeighborsClassifier()
knn.fit(data2, target)
y_pred = knn.predict(XY)
y_pred
# 分界图
plt.scatter(XY[:, 0], XY[:, 1], c=y_pred)

在这里插入图片描述
注意:上面绘图需要等待,可以使用matplotlib自带的绘图函数,绘图就不用等待了。
pcolormesh(): 画分界图,边界图
plt.pcolormesh(X, Y, y_pred.reshape(1000, 1000))

相关文章:

机器学习——KNN算法

1、:前提知识 KNN算法是机器学习算法中用于分类或者回归的算法,KNN全称为K nearest neighbour(又称为K-近邻算法) 原理:K-近邻算法采用测量不同特征值之间的距离的方法进行分类。 优点:精度高 缺点&…...

Kali 软件管理测试案例

案例1 :显示目录树 tree ┌──(root㉿kali)-[~] └─# tree --help usage: tree [-acdfghilnpqrstuvxACDFJQNSUX] [-L level [-R]] [-H baseHREF][-T title] [-o filename] [-P pattern] [-I pattern] [--gitignore][--gitfile[]file] [--matchdirs] [--metafirs…...

【分布式】Zookeeper

Java开发者视角下的Zookeeper—— 在什么场景下使用,怎么用 可以参考:https://zhuanlan.zhihu.com/p/62526102 Zookeeper是什么? ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务。ZooKeeper 的设计目标是将那些复…...

ScheduleJS Crack,新的“信息列”水平滚动功能

ScheduleJS Crack,新的“信息列”水平滚动功能 增加了对Angular 16的支持 新的“信息列”水平滚动功能。 新的“信息列”固定功能。 添加了输入属性以处理组件模板中的偶数和奇数ScheduleRowPlainBackgroundColor以及CSS变量。 改进了“信息列”和角度甘特组件的类型。 Schedul…...

curl封装

一。由于工作的原因,需要对curl做一些封装,附加上我们的证书,提供给第三个C和jAVA使用。 二。头文件封闭四个函数,get,post,download,upload #ifndef CURLHTTP_H #define CURLHTTP_H#include …...

C语言数据类型和变量

C语言数据类型和变量 数据类型分类内置类型【C语言本身就具有的类型】自定义类型【自己来创建类型】取值范围 变量变量的创建变量创建的语法形式变量的分类全局变量局部变量 栈区、堆区、静态区 算术操作符赋值操作符连续赋值复合赋值符 单目操作符:、--、、-强制类…...

分布式训练 最小化部署docker swarm + docker-compose落地方案

目录 背景: 前提条件: 一、docker环境初始化配置 1. 安装nvidia-docker2 2. 安装docker-compose工具 3. 获取GPU UUID 4. 修改docker runtime为nvidia,指定机器的UUID 二、docker-swarm 环境安装 1. 初始化swarm管理节点 2. 加入工…...

QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动

QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动 0、背景1、基本环境2、开发环境编译Qt MySql数据库驱动2.1 依赖说明2.2 MySQL驱动编译过程 3、交叉编译Qt MySql数据库驱动3.1 依赖说明3.3.1 如何在交叉编译服务器上找到mysql.h及相关头文件3.3.2 如果…...

QT使用QXlsx实现数据验证与Excel公式操作 QT基础入门【Excel的操作】

准备环境:QT中使用QtXlsx库的三种方法 1、公式操作写单行公式 //右值初始化Format rAlign;rAlign.setHorizontalAlignment(Format::AlignRight);//左值初始化Format lAlign;lAlign.setHorizontalAlignment(Format::AlignLeft);xlsx.write("B3", 40, lAlign);xlsx.wr…...

renrenfast Vue2 打包发布

1、修改 static/config/index-prod.js 文件 // api接口请求地址 window.SITE_CONFIG[baseUrl] http://192.168.1.86:8080/renren-fast; /*** 生产环境*/ ;(function () {window.SITE_CONFIG {};// api接口请求地址window.SITE_CONFIG[baseUrl] http://192.16…...

NoSQL数据库介绍+Redis部署

目录 一、NoSQL概述 1、数据的高并发读写 2、海量数据的高效率存储和访问 3、数据库的高扩展和高可用 二、NoSQL的类别 1、键值存储数据库 2、列存储数据库 3、文档型数据库 4、图形化数据库 三、分布式数据库中的CAP原理 1、传统的ACID 1)、A--原子性 …...

【mindspore学习】环境配置

本次实验搭配的环境是 CUDA 11.6 CUDNN v8.9.4 TensorRT-8.4.1.5 mindspore 2.1.0。 1、配置 Nvidia 显卡驱动 如果原来的主机已经安装了 nvidia 驱动,为避免版本的冲突,建议先清除掉旧的 nvidia驱动 sudo apt-get --purge remove nvidia* sudo apt…...

基于shell脚本对aliyun npm仓库(https://packages.aliyun.com)登录认证

文章目录 基于shell脚本对阿里云npm仓库(https://packages.aliyun.com)登录认证食用人群食用方式 基于shell脚本对阿里云npm仓库(https://packages.aliyun.com)登录认证 食用人群 由于一些安全的原因,某些企业可能会…...

K8s Pod 安全认知:从openshift SCC 到 PSP 弃用以及现在的 PSA

写在前面 简单整理,博文内容涉及: PSP 的由来PSA 的发展PSA 使用认知不涉及使用,用于了解 Pod 安全 API 资源理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是…...

提高企业会计效率,选择Manager for Mac(企业会计软件)

作为一家企业,良好的财务管理是保持业务运转的关键。而选择一款适合自己企业的会计软件,能够帮助提高会计效率、减少错误和节约时间。在众多的选择中,Manager for Mac(企业会计软件)是一款值得考虑的优秀软件。 首先,Manager for…...

软考:中级软件设计师:信息系统的安全属性,对称加密和非对称加密,信息摘要,数字签名技术,数字信封与PGP

软考:中级软件设计师:信息系统的安全属性 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准…...

Vue3中reactive响应式失效的问题

情景阐述 弹窗内部有一个挑选框,要通过请求接口获取挑选框下面可供选择的数据。 这是一个很简单的情境,我立刻有了自己的思路。如果实现搜索,数据较少可以直接用elementplus自带的filter。如果数据较多,就需要传val,…...

lamp

LAMP 环境 指的是在 Linux 操作系统中分别安装 Apache 网页服务器、MySQL 数据库服务器和 PHP 开发服务器,以及一些对应的扩展软件。AMP也支持win操作系统 (sccm 域升级版) LAMP架构是目前成熟的企业网站应用模式之一,指的是协同…...

LeetCode 周赛上分之旅 #42 当 LeetCode 考树上倍增,出题的趋势在变化吗

⭐️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度…...

Qt 自定义菜单 托盘菜单

托盘菜单实现:通过QSystemTrayIconQMenuQAction即可完美实现! 实现方式:createActions用于创建菜单、菜单项,translateActions用于设置文本、实现多语化,translateAccount用于设置用户空间配额。 void TrayMenu::createActions(…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...