机器学习——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(…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
