【Python机器学习】KNN进行水果分类和分类器实战(附源码和数据集)

2023-11-07

需要源码和数据集请点赞关注收藏后评论区留言私信~~~

KNN算法简介

KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。

KNN算法的思想非常简单:对于任意n维输入向量,分别对应于特征空间中的一个点,输出为该特征向量所对应的类别标签或预测值。

KNN算法是一种非常特别的机器学习算法,因为它没有一般意义上的学习过程。它的工作原理是利用训练数据对特征向量空间进行划分,并将划分结果作为最终算法模型。存在一个样本数据集合,也称作训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。

输入没有标签的数据后,将这个没有标签的数据的每个特征与样本集中的数据对应的特征进行比较,然后提取样本中特征最相近的数据(最近邻)的分类标签。

一般而言,我们只选择样本数据集中前k个最相似的数据,这就是KNN算法中K的由来,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的类别,作为新数据的分类。

KNN分类算法的分类预测过程十分简单并容易理解:对于一个需要预测的输入向量x,我们只需要在训练数据集中寻找k个与向量x最近的向量的集合,然后把x的类别预测为这k个样本中类别数最多的那一类。

KNN算法中只有一个超参数k,k值的确定对KNN算法的预测结果有着至关重要的影响。接下来,我们讨论一下k值大小对算法结果的影响以及一般情况下如何选择k值。

如果k值比较小,相当于我们在较小的领域内训练样本对实例进行预测。这时,算法的近似误差(Approximate Error)会比较小,因为只有与输入实例相近的训练样本才会对预测结果起作用。

但是,它也有明显的缺点:算法的估计误差比较大,预测结果会对近邻点十分敏感,也就是说,如果近邻点是噪声点的话,预测就会出错。因此,k值过小容易导致KNN算法的过拟合。

同理,如果k值选择较大的话,距离较远的训练样本也能够对实例预测结果产生影响。这时候,模型相对比较鲁棒,不会因为个别噪声点对最终预测结果产生影响。但是缺点也十分明显:算法的近邻误差会偏大,距离较远的点(与预测实例不相似)也会同样对预测结果产生影响,使得预测结果产生较大偏差,此时模型容易发生欠拟合。

因此,在实际工程实践中,我们一般采用交叉验证的方式选取k值。通过以上分析可知,一般k值选得比较小,我们会在较小范围内选取k值,同时把测试集上准确率最高的那个确定为最终的算法超参数k。

使用KNN进行水果分类

部分数据如下

预测结果和精确度如下

 

部分代码如下

from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
import pandas as pd
#导入水果数据并查看数据特征
fruit = pd.read_csv('fruit_data.txt','\t')
# 获取属性
X = fruit.iloc[:,1:]
# 获取类别
Y = fruit.iloc[:,0].T
# 划分成测试集和训练集
fruit_train_X,fruit_test_X,fruit_train_y,fruit_test_y=train_test_split(X,Y,test_size=0.2, random_state=0)
#分类eighborsClassifier()
#对训练集进行训练
knn.fit(fruit_train_X, fruit_train_y)
#对测试集数据的水果类型进行预测
predict_result = knn.predict(fruit_test_X)
print('测试集大小:',fruit_test_X.shape)
print('真实结果:',fruit_test_y)
print('预it_test_y))

 绘制KNN分类器图

分类结果如下 可以看到鸢尾花数据集大致分为三类

 部分代码如下

import numpy as np
from sklearn import neighbors, datasets
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

# 建立KNN模型,使用前两个特征
iris = datasets.load_iris()
irisData = iris.data[:, :2]   # Petal length、Petal width特征
irisTarget = iris.target
clf = neors.KNeighborsClassifier(5) # K=5
clf.fit(irisData, irisTarget)

#绘制plot 
ColorMp = ListedColormap(['#005500', '#00AA00', '#00FF00'])
X_min, X_max = irisData[:, 0].min(), irisData[:, 0].max()
Y_min
label = clf.predict(np.c_[X.ravel(), Y.ravel()])
label = label.reshape(X.shape) 
#绘图并显示
plt.figure()
plt.pcolormesh(X,Y,label,cmap=ColorMp)
plt.show()

创作不易 觉得有帮助请点赞关注收藏~~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python机器学习】KNN进行水果分类和分类器实战(附源码和数据集) 的相关文章

  • numba 函数何时编译?

    我正在研究这个例子 http numba pydata org numba doc 0 15 1 examples html multi threading http numba pydata org numba doc 0 15 1 ex
  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se
  • python future 和元组解包

    实现像使用 future 进行元组解包这样的事情的优雅 惯用的方法是什么 我有这样的代码 a b c f x y g a b z h y c 我想将其转换为使用期货 理想情况下我想写一些类似的东西 a b c ex submit f x y
  • 我怎样才能更多地了解Python的内部原理? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我使用Python编程已经有半年多了 我对Python内部更感兴趣 而不是使用Python开发应用程序
  • python 中的代表

    我实现了这个简短的示例来尝试演示一个简单的委托模式 我的问题是 这看起来我已经理解了委托吗 class Handler def init self parent None self parent parent def Handle self
  • 如何正确地将 MIDI 刻度转换为毫秒?

    我正在尝试将 MIDI 刻度 增量时间转换为毫秒 并且已经找到了一些有用的资源 MIDI Delta 时间刻度到秒 http www lastrayofhope co uk 2009 12 23 midi delta time ticks
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack
  • 在 Python distutils 中从 setup.py 查找脚本目录的正确方法?

    我正在分发一个具有以下结构的包 mymodule mymodule init py mymodule code py scripts script1 py scripts script2 py The mymodule的子目录mymodul
  • 如何在 pytest 中将单元测试和集成测试分开

    根据维基百科 https en wikipedia org wiki Unit testing Description和各种articles https techbeacon com devops 6 best practices inte
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 忽略 Mercurial hook 中的某些 Mercurial 命令

    我有一个像这样的善变钩子 hooks pretxncommit myhook python path to file myhook 代码如下所示 def myhook ui repo kwargs do some stuff 但在我的例子中
  • Pandas 数据帧到 numpy 数组 [重复]

    这个问题在这里已经有答案了 我对 Python 很陌生 经验也很少 我已经设法通过复制 粘贴和替换我拥有的数据来使一些代码正常工作 但是我一直在寻找如何从数据框中选择数据 但无法理解这些示例并替换我自己的数据 总体目标 如果有人真的可以帮助
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • 首先对列表中最长的项目进行排序

    我正在使用 lambda 来修改排序的行为 sorted list key lambda item item lower len item 对包含元素的列表进行排序A1 A2 A3 A B1 B2 B3 B 结果是A A1 A2 A3 B
  • 在 pytube3 中获取 youtube 视频的标题?

    我正在尝试构建一个应用程序来使用 python 下载 YouTube 视频pytube3 但我无法检索视频的标题 这是我的代码 from pytube import YouTube yt YouTube link print yt titl
  • 无法在 osx-arm64 上安装 Python 3.7

    我正在尝试使用 Conda 创建一个带有 Python 3 7 的新环境 例如 conda create n qnn python 3 7 我收到以下错误 Collecting package metadata current repoda
  • 使用 Firefox 绕过弹出窗口下载文件:Selenium Python

    我正在使用 selenium 和 python 来从中下载某些文件web page http www oceanenergyireland com testfacility corkharbour observations 我之前一直使用设
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 具有自定义值的 Django 管理外键下拉列表

    我有 3 个 Django 模型 class Test models Model pass class Page models Model test models ForeignKey Test class Question model M
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li

随机推荐

  • windows 服务器 部署java项目

    第一步 下载软件 只下载我这里需要的软件 如有不同请自行百度 链接 https pan baidu com s 1pAWffZZvKW2B9tj3YEuHeA pwd rps4 提取码 rps4 第二步 配置软件环境变量 配置并安装jdk
  • Jmeter系列-测试计划详细介绍(3)

    测试计划的作用 测试计划描述了 Jmeter 在执行时 一系列的步骤 一个完整的测试计划包含了一个或多个 线程组 逻辑控制器 采样器 监听器 定时器 断言和配置元素 Jmeter原件和组件的介绍 基本元件的介绍 多个类似功能组件的 容器 类
  • 浅谈Unity资源异步加载和Coroutine的使用

    为了节省内存 游戏的一些资源往往需要在运行时 runtime 动态加载 如果资源本身加载比较耗时 采用同步方法会产生卡顿现象 对此的解决方法通常采用多线程或者使用引擎本身自带的异步加载方法 在Unity开发中 由于一些方法 如Resourc
  • 微信小程序 audio 音频 组件

    完整微信小程序 Java后端 技术贴目录清单页面 必看 音频 1 6 0版本开始 该组件不再维护 建议使用能力更强的 wx createInnerAudioContext 接口 属性 类型 默认值 必填 说明 最低版本 id string
  • 知识图谱——Python操作Neo4j导入CSV文件建立图谱

    首先Neo4j是图数据库 最重要的就是结点和边的关系 每两个结点和边都可以看成三元组 主谓宾的关系 当然结点也是可以添加属性的 但是首先要有结点 在添加属性 本片文章就是用简单的方式一次性给大家讲解清楚 简单起见 我们用西游记师徒四人为例子
  • HC-SR505红外感应模块驱动(STM32)

    一 前期准备 单片机 STM32F103ZET6 开发环境 MDK5 14 库函数 标准库V3 5 HC SR505红外感应模块 淘宝有售 二 实验效果 三 驱动原理 这个模块比较简单 当有人靠近时候其IO输出3 3V STM32可以直接采
  • Scrapy知识系列:使用CrawlerProcess从外部运行多个spider时,运行脚本需要与scrapy.cfg在同级目录

    说明 如题 否则settings pipelines middlewares都没有办法直接使用 修改起来非常麻烦
  • JAVAWEB学习笔记-前端基础

    文章目录 HTML篇 HTML简介 HTML元素 开始编写 CSS篇 认识css CSS 规则集 解释 css的初步使用 在HTML里使用CSS 外部样式表 内部样式表 内联样式 规则 速记属性 CSS工作原理 HTML篇 HTML简介 参
  • postgres wal2json插件jsonb字段数据丢失问题解决

    使用pg wal2json debezium进行数据同步时 发现偶尔会有jsonb字段数据丢失的问题 进行测试时发现 1 发生数据丢失的jsonb字段长度都比较大 超过toast阈值 使用toast表存储 2 针对发生jsonb字段丢失的数
  • llvm libLLVMCore源码分析 04 - Use Class

    源码路径 llvm include llvm IR Use h llvm include llvm IR Value h llvm include llvm IR User h llvm Use class 在之前的系列文章中 我们讲到Us
  • npm,cnpm,yarn,tyarn 区别

    做前端的应该都用过标题提到的包管理器 简单说一下这4个包管理器的区别 npm 这应该是最常用的 在某些情况会出现丢包 而且由于某种原因会下载很慢 通常会配置国内镜像 我已经很少用npm了 主要用它下载 cnpm 或 yarn cnpm 这个
  • 为什么您的WordPress网站会容易被黑客攻击

    首先 不仅是WordPress 互联网上所有具有内容管理系统 CMS 的网站都容易受到黑客攻击 WordPress网站成为通用目标的原因是因为WordPress是世界上最受欢迎的网站CMS 它为全球超过33 的网站提供支持 这种巨大的流行度
  • 【Spring Boot 源码学习】@SpringBootApplication 注解

    Spring Boot 源码学习系列 SpringBootApplication 注解 引言 主要内容 1 创建 Spring Boot 项目 2 Spring Boot 入口类 3 SpringBootApplication 介绍 总结
  • 结构体中定义函数指针

    结构体指针变量的定义 定义结构体变量的一般形式如下 形式 先定义结构体类型 再定义变量 struct 结构体标识符 成员变量列表 struct 结构体标识符 指针变量名 变量初始化 struct 结构体标识符 变量名 初始化值1 初始化值2
  • 【MYSQL】排序时 如何将0排到最后,并让其他值按正序展示?

    背景 展示排名时需要1 2 3 4 5 这样展示但是有些没有排名得数据字段默认值时0 这时直接用ASC就会出现问题 实现效果 实现方式 使用MySQL的ORDER BY语句来实现 以下是一个示例的SQL查询语句 SELECT FROM ta
  • 划拳 C语言

    划拳是古老中国酒文化的一个有趣的组成部分 酒桌上两人划拳的方法为 每人口中喊出一个数字 同时用手比划出一个数字 如果谁比划出的数字正好等于两人喊出的数字之和 谁就赢了 输家罚一杯酒 两人同赢或两人同输则继续下一轮 直到唯一的赢家出现 下面给
  • IDEA导入maven依赖失败解决方法

    由于网络问题 maven依赖经常会导入失败 一般的jar包是从中央仓库或阿里云仓库进行拉取 网络加载慢超时等原因导致相关依赖jar包导入不全 下面就我在实际的项目导入操作中遇到的问题及解决方法进行总结梳理 希望可以帮助到大家 方法一 更换仓
  • 数据结构-单链表交换相邻两个元素-java

    1 递归法 时间复杂度O n 递归的时间复杂度一般看层数 这个层数是n层 每层执行一次操作 所以是O n 原理 把后半部分看成已经反转好的数据 public ListNode reverseAdjoinList ListNode head
  • 运放的PID电路

    PID就是 比例 proportion 积分 integral 导数 derivative 在工程实际中 应用最为广泛的调节器控制规律为比例 积分 微分控制 简称PID控制 又称PID调节 运放的积分电路 运放的微分电路 微分电路的输出端和
  • 【Python机器学习】KNN进行水果分类和分类器实战(附源码和数据集)

    需要源码和数据集请点赞关注收藏后评论区留言私信 KNN算法简介 KNN K Nearest Neighbor 算法是机器学习算法中最基础 最简单的算法之一 它既能用于分类 也能用于回归 KNN通过测量不同特征值之间的距离来进行分类 KNN算