当前位置: 首页 > 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(…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线, n r n_r nr​ 根接收天线的 MIMO 系…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

基于Springboot+Vue的办公管理系统

角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...