python代码实现KNN对鸢尾花的分类

一、KNN模型-KNeighborsClassifier()

1.1 导入sklearn第三方库

from sklearn import datasets #sklearn的数据集
from sklearn.neighbors import KNeighborsClassifier #sklearn模块的KNN类

我们使用一个叫作鸢尾花数据集的数据,这个数据集里面有 150 条数据,共有 3 个类别,即Setosa 鸢尾花、Versicolour鸢尾花和 Virginica 鸢尾花,每个类别有 50 条数据,每条数据有 4个维度,分别记录了鸢尾花的花萼长度、花萼宽度、花瓣长度和花瓣宽度。

1.2 加载数据集

iris=datasets.load_iris()
iris_x=iris.data
iris_y=iris.target

只用到数据维度iris.data,数据标签iris.target。
可以直接在python代码中输入iris.data或者iris.target查看数据

1.3 划分训练集和测试集

randomarr= np.random.permutation(len(iris_x))
#用前140个作为训练集
#randomarr[:-10]表示从数组的开头到倒数第十个元素之前(不包括倒数第十个元素)的所有元素
iris_x_train = iris_x[randomarr[:-10]]
iris_y_train = iris_y[randomarr[:-10]]#用后10个作为测试集
#randomarr[-10:]表示从数组 randomarr 的倒数第十个元素开始到最后一个元素的子数组,记住索引值
iris_x_test = iris_x[randomarr[-10:]]
iris_y_test = iris_y[randomarr[-10:]]

len(randomarr[:-10]) #输出140
numpy.random.permutation函数用于对数组进行随机排列(即置换)。它的作用是返回一个新的打乱了顺序的数组,而不会修改原始数组
如果输入是一个整数n,那么函数会返回一个包含0到n-1的整数的随机排列。 如果输入是一个数组,那么函数会返回该数组的一个随机排列。

1.4 创建模型,训练模型

# 创建一个 K 近邻分类器,默认邻居数为 5
knn = KNeighborsClassifier()
# 使用训练数据拟合模型
knn.fit(iris_x_train, iris_y_train)

1.5 应用测试数据集分类

# 使用模型进行预测
iris_y_predict = knn.predict(iris_x_test)
print('iris_y_predict = ')
print(iris_y_predict)
#输出原始测试数据集的正确标签,以方便对比
print('iris_y_test = ')
print(iris_y_test)
#输出准确率计算结果
print('Accuracy:',score)
iris_y_predict = 
[2 1 2 0 1 1 0 1 2 2]
iris_y_test = 
[2 1 2 0 1 2 0 1 2 2]
Accuracy: 0.9

二、KNN模型-knn.kneighbors()

neighborpoint=knn.kneighbors([iris_x_test[-1]],5)
#这里是引用[iris_x_test[-1]]#是测试数据集中的最后一个样本第一个参数就是测试数据集里面倒数最后一个样本,5表示返回5个邻居
neighborpoint
(array([[0.26457513, 0.52915026, 0.54772256, 0.54772256, 0.60827625]]),array([[  4,  30, 111,  55,  74]], dtype=int64))

KNeighborsClassifier(n_neighbors=5) 是用来进行分类预测的模型,而knn.kneighbors 是用来寻找最近邻居的方法。返回的是最近邻居的索引和对应的距离
knn.kneighbors 方法接受一个数据点或一组数据点作为输入,并返回这些数据点的每个最近邻居的索引和对应的距离。
X: 一个包含数据点特征的数组,用于寻找最近邻居。
n_neighbors(可选):一个整数,表示要返回的最近邻居的数量。如果未指定,则默认为 k,即 KNeighborsClassifier 初始化时设置的邻居数。

import numpy as np
from sklearn.neighbors import KNeighborsClassifier
# 创建一些示例训练数据
X_train = np.array([[1, 2],[2, 3],[3, 4],[4, 5]])
y_train = np.array([0, 0, 1, 1])  # 样本的类别标签# 创建一个新的测试数据点
X_test = np.array([[2, 3]])
knn0 = KNeighborsClassifier(n_neighbors=2)
knn0.fit(X_train, y_train)
point=knn0.kneighbors(X_test,2)
point
(array([[0.        , 1.41421356]]), array([[1, 0]], dtype=int64))

三、KNN模型-knn.predict_proba()

probility=knn.predict_proba(iris_x_test)
predict=knn.predict(iris_x_test)
probility,predict
(array([[0. , 0. , 1. ],[0. , 1. , 0. ],[0. , 0. , 1. ],[1. , 0. , 0. ],[0. , 1. , 0. ],[0. , 1. , 0. ],[1. , 0. , 0. ],[0. , 0.8, 0.2],[0. , 0. , 1. ],[0. , 0. , 1. ]]),array([2, 1, 2, 0, 1, 1, 0, 1, 2, 2]))
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
# 创建一些示例训练数据
X_train = np.array([[1, 2],[2, 3], [3, 4], [4, 5]])
y_train = np.array([0, 1, 1, 2])  # 样本的类别标签# 创建一个新的测试数据点
X_test = np.array([[1.1, 1.1]])# 创建并训练 K 近邻分类器
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)# 预测测试数据点属于每个类别的概率
probabilities = knn.predict_proba(X_test)print("测试数据点属于每个类别的概率:")
print(probabilities)
测试数据点属于每个类别的概率:
[[0.33333333 0.66666667 0.        ]]

假设我们有一个三分类问题,有以下训练数据:
类别 0:包含一个样本:[1, 2]
类别 1:包含二个样本:[2, 3],[3, 4]
类别 2:包含一个样本:[4, 5]
现在,我们使用一个 K 近邻分类器,设定 k=3,并且对一个新的测试样本 [1.1, 1.1] 进行分类

距离计算
测试样本 [1.1, 1.1] 与训练样本 [1, 2] 之间的距离:0.905
测试样本 [1.1, 1.1] 与训练样本 [2, 3] 之间的距离:1.825
测试样本 [1.1, 1.1] 与训练样本 [3, 4] 之间的距离:2.98
测试样本 [1.1, 1.1] 与训练样本 [4, 5] 之间的距离:4.242
确定最近的K个邻居
根据上述距离计算,最近的3(分几类就找几个邻居)个邻居分别是 [1, 2],[2, 3] 和 [3, 4]。
这三个邻居分别来自于类别0、类别1和类别1。因此,我们预测测试样本 [1.1, 1.1] 属于哪个类别?
类别0:出现1次
类别1:出现2次
类别2:出现0次
根据最近的3个邻居,测试样本 [1.1, 1.1] 最有可能属于类别1。

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

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

相关文章

身份证实名认证接口守护账号安全、实名认证接口Java开发示例

身份证实名认证接口就是网民账号的贴身保镖,只需简单几步操作,即可实现高效、精准的身份验证,从此告别信息泄露的恐慌!无论是线上交易、社交互动还是各类服务注册,都能确保你是独一无二的你! 翔云身份证实…

IP Transit作为一种网络服务

IP Transit作为一种网络服务,通过BGP(边界网关协议)对接,将用户的IP地址段与全球互联网进行连接,实现用户自有IP地址段在全球互联网的穿透。这种服务在中国境外,特别是在AS4837/AS10099网络平台上得到了广泛…

云手机对出海企业有什么帮助?

近些年,越来越多的企业开始向海外拓展,意图发掘更广阔的市场。在这过程中,云手机作为一个新型工具为很多企业提供了助力,尤其在解决海外市场拓展过程中的诸多挑战方面发挥着作用。 首先,云手机的出现解决了企业在海外拓…

【Linux系统化学习】死锁 | 线程同步

目录 死锁 死锁的必要条件 避免死锁 线程同步 条件变量 同步概念和竞态条件 条件变量接口 创建和初始化条件变量 等待条件满足 唤醒等待 毁条件变量 为什么 pthread_cond_wait 需要互斥量? 条件变量使用规范 等待条件代码 给条件发送信号代码 死锁 死锁是指在一…

扭蛋机小程序带来了什么优势?扭蛋机收益攻略

在当下的潮流消费时代,人们对潮玩也日益个性化,扭蛋机作为一种新型的娱乐消费模式,深受大众喜爱。扭蛋机的价格低,各个年龄层的玩家都可以进行购买,潜在玩家量非常大。扭蛋机商品主打热门IP周边等,种类繁多…

SQL注入攻击:原理与防御策略

SQL注入攻击:原理与防御策略 目录 SQL注入攻击:原理与防御策略 一、SQL注入简介 二、攻击语句原型 三、技术分析与深度挖掘 四、防御策略与最佳实践 五、案例研究与实际应用 一、SQL注入简介 定义与原理 SQL注入是一种攻击技术,通过在…

作为领导,员工不听你的安排怎么办?

很多新晋的技术领导者,最头痛的问题莫过于员工不执行你安排的任务,甚至最后还得自己亲自动手上。 作为领导,面对员工不执行你安排的任务,不要抱怨、更不要责骂员工,这些都无助于解决问题,甚至会变得更糟糕…

【PostgreSQL】Postgres数据库安装、配置、使用DBLink详解

目录 一、技术背景1.1 背景1.2 什么是 DBLink 二、安装配置 DBLink2.1 安装 DBLink2.2 配置 DBLink1. 修改 postgresql.conf2. 修改 pg_hba.conf 三、DBLink 使用3.1 数据准备3.2 DBLink 使用1. 创建 DBLink 连接2. 使用 DBLink 进行查询3. 使用 DBLink 进行增删改4. 使用 DBLi…

python代码实现kmeans对鸢尾花聚类

导入第三方库和模型 from sklearn import datasets import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans2、创建画图函数 def draw_result(train_x, labels, cents, title):n_clusters np.unique(labels).shape[0]#获取类别个数color …

用vue3实现留言板功能

效果图&#xff1a; 代码&#xff1a; <script setup lang"ts"> import { ref } from vue;interface Message {name: string;phone: string;message: string; }const name ref<string>(); const phone ref<string>(); const message ref<st…

Llama 3 安装使用方法

Llama3简介&#xff1a; llama3是一种自回归语言模型&#xff0c;采用了transformer架构&#xff0c;目前开源了8b和70b参数的预训练和指令微调模型&#xff0c;400b正在训练中&#xff0c;性能非常强悍&#xff0c;并且在15万亿个标记的公开数据进行了预训练&#xff0c;比ll…

Go语言中,两个比较流行的缓存库

在 Go 中实现带有过期时间的缓存通常需要一个可以自动处理键值过期的缓存系统。虽然标准库中没有直接提供这种功能&#xff0c;但有几个流行的第三方库可以很好地满足这一需求。下面我会介绍两个比较流行的 Go 缓存库&#xff1a;go-cache 和 bigcache。 1. go-cache go-cache…

python——井字棋游戏——登入注册界面

本篇文章只讲解登入和注册页面&#xff0c;在后面的文章中会讲解井字棋游戏&#xff0c;然后把井字棋和登入界面进行连接&#xff0c;整合成一个完整的游戏。 登入注册界面在本篇文章的末尾。 1.实现登入界面 &#xff08;1&#xff09;导入图片 把这张图片存储在与代码路径…

Rundeck(四)安全配置

自动化运维工具rundeck GitHub - rundeck 是java开发的开源自动化服务&#xff0c;具有 Web 控制台、命令行工具和 WebAPI。它使您可以轻松地跨一组节点运行自动化任务&#xff0c;适合运维自动化管理、自动发布管理、运维数据分析等 网站&#xff1a;https://www.rundeck.co…

人人开源框架运行

Getting started renrenio/renren-fast-vue Wiki GitHub 人人开源 1.启动navicat&#xff1a;新建一个数据库renren-fast&#xff0c;字符集为utf-8,utf-8mb3或者utf-8mb4&#xff0c;排序规则不选 2.数据库操作在renren-fast数据库中选择表&#xff0c;运行renren-fast-ma…

LeetCode 每日一题 ---- 【1017.负二进制转换】

LeetCode 每日一题 ---- 【1017.负二进制转换】 1017.负二进制转换方法一&#xff1a;模拟进制转换推广&#xff1a;任意进制转换 1017.负二进制转换 方法一&#xff1a;模拟进制转换 我们平常做进制转换最常用的方法就是辗转相除法&#xff0c;下面的图示分别给出了普通的10…

电路板的EMC干扰源有哪些

电路板的EMC&#xff08;电磁兼容性&#xff09;干扰源主要包括以下几类&#xff1a; 自然干扰源&#xff1a;这些干扰源来自自然界&#xff0c;包括大气噪声干扰&#xff08;如雷电产生的火花放电&#xff09;、太阳噪声干扰&#xff08;由太阳黑子的辐射噪声引起&#xff09;…

web自动化测试详细流程和步骤

一、什么是web自动化测试 自动化&#xff08;Automation&#xff09;是指机器设备、系统或过程&#xff08;生产、管理过程&#xff09;在没有人或较少人的直接参与下&#xff0c;按照人的要求&#xff0c;经过自动检测、信息处理、分析判断、操纵控制&#xff0c;实现预期的目…

卷积注意力模块 CBAM | CBAM: Convolutional Block Attention Module

论文名称&#xff1a;《CBAM: Convolutional Block Attention Module》 论文地址&#xff1a;https://arxiv.org/pdf/1807.06521.pdf 我们提出了卷积块注意力模块&#xff08;CBAM&#xff09;&#xff0c;这是一种简单但有效的前馈卷积神经网络注意力模块。给定一个中间特征图…

Windows 系统中常用的命令提示符(CMD)命令

一、文件和目录操作&#xff1a; dir&#xff1a;列出当前目录中的文件和子目录。 cd 目录路径&#xff1a;更改当前目录。 mkdir 目录名&#xff1a;创建新目录。 del 文件名&#xff1a;删除文件。 rmdir 目录名&#xff1a;删除目录。 二、系统信息和管理&#xff1a; sy…