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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

【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…

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…

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;这是一种简单但有效的前馈卷积神经网络注意力模块。给定一个中间特征图…

transformer上手(10)—— 文本摘要任务

文本摘要是一个 Seq2Seq 任务&#xff0c;尽可能保留文本语义的情况下将长文本压缩为短文本。 文本摘要可以看作是将长文本“翻译”为捕获关键信息的短文本&#xff0c;因此大部分文本摘要模型同样采用 Encoder-Decoder 框架。当然&#xff0c;也有一些非 Encoder-Decoder 框架…

prompt提示词:AI英语词典,让AI教你学英语,通过AI实现一个网易有道英语词典

目录 英语词典提问技巧效果图&#xff1a;提示词&#xff1a; 英语词典提问技巧 随着AI工具的出现&#xff0c;学英语也可以变得很简单&#xff0c;大家可以直接通过AI 来帮助自己&#xff0c;提高记忆单词的效率&#xff0c;都可以不需要网易有道词典了&#xff0c;今天我教大…

分布式ID之雪花算法

1. Seata对雪花算法生成ID的改良 滑动验证页面 &#xff08;含代码&讲解&#xff09; Seata基于改良版雪花算法的分布式UUID生成器分析&#xff1a;时间戳和节点ID位置进行了调换。官网&#xff1a;Seata基于改良版雪花算法的分布式UUID生成器分析 | Apache Seata关于新版…

Asp .Net Core 系列:国际化多语言配置

文章目录 概述术语 本地化器IStringLocalizer在服务类中使用本地化 IStringLocalizerFactoryIHtmlLocalizerIViewLocalizer 资源文件区域性回退 配置 CultureProvider内置的 RequestCultureProvider实现自定义 RequestCultureProvider使用 Json 资源文件 设计原理IStringLocali…

第二证券|股息分红和送股哪个好?

在股票投资中&#xff0c;股息分红和分红送股是两种常见的股票分红方法。关于股息分红和送股哪个好&#xff0c;第二证券下面就为我们具体介绍一下。 股息分红和送股哪个好并没有一个绝对的答案&#xff0c;它们只是上市公司向股东分配利润的不同方法。股息分红的好处是投资者…

武汉星起航:挂牌上海股权中心,开启资本新篇章助力跨境电商飞跃

2023年10月30日&#xff0c;武汉星起航电子商务有限公司在上海股权托管交易中心成功挂牌展示&#xff0c;标志着这家在跨境电商领域拥有卓越声誉的企业正式迈入了资本市场的大门。对于武汉星起航来说&#xff0c;这不仅是其发展历程中的一个重要里程碑&#xff0c;更是对其业务…

STM32-TIM定时器与PWM输出

学习目标&#xff1a; 1. 熟练掌握 TIM 的参数配置。 2. 掌握通道的参数配置。 3. 深刻理解 PWM 与功率的关系。 4. 理解 PWM 的原理示意。 一 什么是 PWM 输出 PWM &#xff08; pulse width modulation &#xff09;一种脉冲宽度调节技术。 PWM 的效果是什么样子&#xf…