通俗易懂的机器学习——sklearn鸢尾花分类(KNN)

【机器学习实战】科学处理鸢尾花数据集 目录 一、案例分析 二、数据处理 2.1 回答问题 2.2 检查数据 2.3清理数据 2.4 测试数据 三、用 scikit-learn 来预测数据 3.1选出特征 (输入变量) 和标记 (输出变量) 3.2划分训练集和测试集 3.3 用模型来学习 四、思考题 一、案例分析 假设我们要创建一个智能手机应用程序,从智能手机拍摄的照片中自动识别花的种类。 我们需创建一个... 阅读详情
AI摘要

本文介绍了如何使用sklearn库进行KNN算法的实现,包括数据预处理的MinMaxScaler和StandardScaler方法,以及模型训练、超参数选择(k值的影响),并通过网格搜索找到最佳参数。在鸢尾花数据集上的实验展示了模型的训练过程和效果。

前言

KNN算法是机器学习中较为简单的入门算法,其主要思想是选取k个与待预测点相近的数据,观察他们的类别,本着离谁近就更像谁的思路对于待预测点进行预测,本文将针对使用sklearn进行KNN算法的使用进行详解

数据预处理

在正式开始之前,我们先要进行数据预处理
数据预处理有两种常见的方式,MinMaxScaler和StandardScaler
MinMaxScaler: 𝑋=𝑋−𝑚𝑎𝑥(𝑋)𝑚𝑎𝑥(𝑋)−𝑚𝑖𝑛(𝑋)𝑋=\frac{𝑋−𝑚𝑎𝑥(𝑋)}{𝑚𝑎𝑥(𝑋)−𝑚𝑖𝑛(𝑋)}X=max(X)−min(X)X−max(X)​

StandardScaler: 𝑋=𝑋−𝑚𝑒𝑎𝑛(𝑋)𝑠𝑡𝑑(𝑋)𝑋=\frac{𝑋−𝑚𝑒𝑎𝑛(𝑋)}{𝑠𝑡𝑑(𝑋)}X=std(X)X−mean(X)​

from sklearn.preprocessing import MinMaxScaler, StandardScaler

minmaxscaler = MinMaxScaler() 
standardscaler = StandardScaler()

鸢尾花数据集

从sklearn.datasets中我们可以加载一些数据集,其中包含鸢尾花数据集

from sklearn import datasets
​
# 加载数据集
iris = datasets.load_iris()
X = iris.data[:,2:] # 这里为了画图方便,只取最后两个维度的信息
y = iris.target # 数据标签
X.shape, y.shape

((150, 2), (150,))

模型训练

从sklearn.neighbors我们引出KNeighborsClassifier分类器,直接调用KNN算法进行训练,我们在数据加载时选用sklearn.model_selection中提供的train_test_split来直接划分数据集

from sklearn.neighbors import KNeighborsClassifier  
from sklearn.model_selection import train_test_split 
​
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) 
# 以20%作为测试数据,随机数为42进行随机选取数据
​
X_train_std = standardscaler.fit_transform(X_train) # 数据预处理
X_test_std = standardscaler.fit_transform(X_test) # 数据预处理
​
# 实例化k值为3的knn模型,即n_neighbors=3,即选取最近的三个临近的点
knn_clf = KNeighborsClassifier(n_neighbors=3)  
knn_clf.fit(X_train_std, y_train)
knn_clf.score(X_test_std, y_test)

1.0

超参数选择

k值

对于KNN任务来讲,k值越小越容易过拟合,k值越大越容易欠拟合,所以对于k值的选用要特别注意
绘制子图
我们在这里编写了一个函数来绘制我们用于测试k值时需要画的图

def plot_decision_boundary(model,k, sub, X, y):
    # 用于画图的函数
    x0_min, x0_max = X[:,0].min()-1, X[:,0].max()+1 # 获取x0最小值和最大值
    x1_min, x1_max = X[:,1].min()-1, X[:,0].max()+1 # 获取x1最小值和最大值
    x0, x1 = np.meshgrid(np.linspace(x0_min, x0_max, 100), np.linspace(x1_min, x1_max, 100))  # 以x0和x1的最小值和最大值生成100个二维网格数据
    Z = model.predict(np.c_[x0.ravel(), x1.ravel()]) # 对生成的数据进行预测
    Z = Z.reshape(x0.shape)
    
    # plt.contourf是用来绘制等高线的函数,给定二维坐标和高度值可以画出等高线,x0, x1为二维坐标,Z为高度
    plt.subplot(sub[0], sub[1], sub[2])  # 绘制子图
    plt.contourf(x0, x1, Z, cmap=plt.cm.Spectral) # 预测数据的等高线
    plt.ylabel("x1")
    plt.xlabel("x0")
    plt.xticks([])
    plt.yticks([])
    plt.title('k={:d}'.format(k))
    plt.scatter(X[:,0], X[:,1],c=np.squeeze(y))  # 原数据

选择不同的k值并画图

for k in range(1, 90, 10):
    knn_clf = KNeighborsClassifier(n_neighbors=k)  # 选择不同的k值
    knn_clf.fit(X_train_std, y_train)
    plot_decision_boundary(knn_clf, k, (3, 3, k // 10+1), X_train_std, y_train)
plt.show()

在这里插入图片描述

其他参数

我们可以通过help来获取knn分类器的其他参数

help(knn_clf) # 查看KNN分类器的参数

可以看到Parameters下全是参数以及可选范围的介绍,我们随便选用几个进行尝试
在这里插入图片描述

网格搜索

由于每个参数及其组合我们一个个的去试效率太低,所以我们使用网格搜索来进行,我们在前面使用help已经知道了分类器的参数以及可选的值了,这里我们只需要先设置一个由字典组成的列表并将他和模型一起传到GridSearchCV的实例化中再次进行GridSearchCV的训练就可以得到最佳参数了,在由字典组成的列表中,每一个字典是选用不同的参数组合,字典的key是参数名,字典的value是要进行网格搜索的值,这里的值一定要满足help中规定的值

from sklearn.model_selection import GridSearchCV
​
# 使用网格搜索寻找最佳参数
param_grid=[
    {
        'weights':['uniform'],
        'n_neighbors':list(range(1, 11))
    },
    {
        'weights':['distance'],
        'n_neighbors':list(range(1, 11)),
        'p':list(range(1, 6))
    }
]
​
knn_clf = KNeighborsClassifier()
grid_search = GridSearchCV(knn_clf, param_grid)
grid_search.fit(X_train, y_train)
GridSearchCV

在这里插入图片描述

最佳准确率

grid_search.best_score_  # 最好的准确率是0.9583333333333334

0.9583333333333334

最佳参数

grid_search.best_params_  # 最好准确率对应的参数是{'n_neighbors': 1, 'weights': 'uniform'}

{‘n_neighbors’: 1, ‘weights’: ‘uniform’}

Sklearn工具包及模型评估 一、Sklearn工具包介绍   scikit-learn,又写作sklearn,是一个开源的基于python语言的机器学习工具包。它通过NumPy, SciPy和Matplotlib等python数值计算的库实现高效的算法应用,并且涵盖了几乎所有主流机器学习算法。   官网:https://scikit-learn.org/stable/index.html 1、常用模块   Skle... 阅读详情

相关推荐

机器学习-鸢尾花(Iris Flower)分类

一个机器学习中的“Heelo World”项目,针对鸢尾属的3个亚属进行分类。(Python\Pandas\Matplotlib\SKlearn)

weixin_42611925的博客 1万+

sklearn基础篇(三)-- 鸢尾花(iris)数据集分析和分类

本文是基于《Python机器学习基础教程》第一章学习的总结,主要是基于iris数据集进行探索数据分析和不同分类模型的对比,从而熟悉使用sklearn的模型进行机器学习。

CarpeDiem 12万+

基于sklearn的机器学习 — K近邻(KNN)

k-nearest neighbors(KNN)算法是监督机器学习中最简单但最常用的算法之一。KNN通常被认为是一种惰性的学习算法,从技术上讲,它只是存储训练数据集,而不经历训练阶段。KNN的原理是将新样本的特征与数据集中现有样本的特征进行比较。然后通过算法选择最接近的k个样本(k是自定义参数),新样本的输出是基于"k"最近样本的多数类(用于分类)或平均值(用于回归)确定的。

CDB3399的博客 1996

机器学习项目1:鸢尾花分类

等安装完Anaconda后,可以测试软件的版本。 import scipy import numpy import matplotlib import pandas import sklearn print('scipy:{}'.format(scipy.__version__)) print('numpy:{}'.format(numpy.__version__)) print('matplotlib:{}'.format(matplotlib.__version__)) print('pandas:

xfsong2012的博客 1万+

KNN算法原理及实现鸢尾花分类

鸢尾花分类,KNN,手动实现KNN算法原理

Bugs_6的博客 1484

从0开始,部署micro_ros+stm32f407+stm32cubeIDE

(5)安装依赖项rosdep时,必须处于创建的microros_ws中,因为里面有clone的src文件夹。(3)教程a中的安装docker不是必须的,取决于运行agent时是否想使用docker。(4)记得安装rosdep,并在以后的命令中将rosdep替换为rosdepc。4、运行agent,选择udp、tcp、can、串口,这里没有使用docker。(1)首先参考教程a安装虚拟机和ubuntu,注意版本选择22.04;(2)参考教程b部署micro_ros构建系统。二、安装和运行agent。

m0_37963053的博客 2234

【机器学习】基于KNN算法实现鸢尾花数据集的分类

🚀【机器学习新探】🚀 走进KNN算法的奇妙世界,用简单的逻辑征服复杂的鸢尾花分类任务!🌸 从KNN算法的基本原理讲起,一步步解锁鸢尾花数据集的神秘面纱。🔍 你将看到如何用代码驱动模型训练,如何巧妙选择K值提升分类性能。📈 更有拓展应用等你来探索,从文本分类到图像识别,KNN无所不能!🌐 看完这篇博客,你将收获满满,成为机器学习领域的佼佼者!#KNN算法 #鸢尾花分类 #机器学习实践 #拓展应用

创作高质量博文,分享知识,共同进步! 9382

用InVEST做碳中和规划?手把手教你计算城市碳储量与热岛效应

本文详细介绍了如何利用InVEST模型进行城市碳中和规划的科学评估。通过手把手教学,演示了如何使用该模型的碳存储与城市热岛缓解模块,从数据准备、模型运行到结果解读,量化评估不同规划方案下的碳储量变化与热岛效应缓解潜力,为城市规划者提供科学的决策依据。

weixin_29201313的博客 822

KNN算法实现鸢尾花数据集分类

在python中使用 KNN算法实现鸢尾花数据集分类作者介绍数据集介绍KNN算法介绍用KNN实现鸢尾花分类 作者介绍 乔冠华,女,西安工程大学电子信息学院,2020级硕士研究生,张宏伟人工智能课题组。 研究方向:机器视觉与人工智能。 电子邮件:1078914066@qq.com 数据集介绍 Iris鸢尾花数据集: 包含 3 类分别为山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica),共 150 条数据,每类各 50 个数据,每条记录都

ZHW-鲜橙大AI课题组的博客 1万+

模型算力需求估算

(Billion Parameters,简称B)和训练/推理的计算任务复杂度,结合硬件计算能力(例如每秒浮点运算次数,FLOPS)来估算。以下是详细的方法和公式说明,以及实际的计算示例。算力需求的估算依赖于参数量、模型架构及硬件性能,结合训练/推理场景的特定要求来计算。通过上述公式和示例,我们可以定量分析不同任务的算力需求,并合理配置硬件资源以优化运行效率。结论:推理任务相对较轻,单台H100可以在30秒内完成此任务。推理算力需求一般远低于训练,因为只需要执行前向传播。,可以将训练时间缩短到约。

形上得其象,形下合于数;阴阳自济,玄理自明。 8955

MacOS多次踩坑后成功安装Homebrew

来一次性成功安装Homebrew吧 官网提供的安装脚本无法成功安装Homebrew,原因大家都懂的,故采用脚本安装的方式。 下载homebrew的安装脚本brew_install 在Download路径下执行如下脚本 curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install >> brew_install 修改brew_install脚本 修改brew_install脚本。如果你的脚本打开之后是如下

weixin_41847116的博客 1983

机器学习笔记——利用sklearn中KNN算法实现鸢尾花分类

sklearn__KNN算法实现鸢尾花分类 编译环境 python 3.6 使用到的库 sklearn 简介 本文利用sklearn中自带的数据集(鸢尾花数据集),并通过KNN算法实现了对鸢尾花的分类。 KNN算法核心思想:如果一个样本在特征空间中的K个最相似(最近临)的样本中大多数属于某个类别,则该样本也属于这个类别。 sklearn库介绍 自2007年发布以...

wangTongGen 2万+

智能Agent如何重塑企业流程

在当今数字化时代,企业流程的效率和敏捷性至关重要。传统企业流程往往受限于人工操作,效率低下、成本高昂,难以适应快速变化的市场环境。智能Agent作为一种新兴技术,凭借其强大的智能化能力,正在逐渐改变企业流程的运作模式,为企业带来新的机遇和挑战。智能Agent是一种能够感知环境、自主决策、执行任务的软件实体。它可以模拟人类的智能行为,例如学习、推理、规划和沟通。通过将智能Agent嵌入到企业流程中,可以实现流程的自动化、优化和智能化,从而提高效率、降低成本、提升客户体验。8.1 研究成果总结。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 874

机器学习案例1:KNN实现鸢尾花分类

机器学习案例1—基于KNN实现鸢尾花分类

weixin_46676835的博客 9433

大模型长对话中上下文无法承载全部历史,如何压缩或提取重点

如果说截断和滑动窗口是“硬性”压缩,那摘要生成技术就显得“软”多了,也更接近于智能化的解决方案。它的思路是:不直接丢弃历史,而是通过自然语言处理(NLP)技术,把冗长的对话记录浓缩成一段简短的摘要,保留核心信息。这样既能大幅减少token数量,又不至于丢失关键内容。这种方法通常会借助预训练模型,比如BART或T5,它们擅长从长文本中提取重点内容。

大模型大数据攻城狮的专栏 1588

光伏微电网蓄电池储能控制系统设计及动态性能分析

本文构建了光伏微电网蓄电池储能控制系统的完整理论体系。在系统架构方面,提出了基于直流母线电压平衡的多时间尺度能量管理理论,建立了光伏发电单元的二阶物理模型和MPPT动态跟踪算法。针对蓄电池系统,设计了融合二阶RC等效电路与扩展卡尔曼滤波的SOC估计方法,误差控制在3%以内。双向DC-DC变换器采用状态空间平均建模方法,推导了小信号传递函数,为闭环控制提供理论基础。该体系实现了从瞬时功率平衡到长期能量调度的多层级协同控制,为微电网稳定运行提供了系统的解决方案。

AI的内部世界的博客 191

【机器学习】分类算法 - KNN算法(K-近邻算法)KNeighborsClassifier

K-近邻算法的核心思想是根据「邻居」来「推断」你的类别。

wangyuxiang946的博客 1万+

Burpsuite 使用教程

Burpsuite 使用教程

xiongIT的博客 8216

机器学习-KNN算法(鸢尾花分类实战)

“近朱者赤近墨者黑",所谓的K近邻,也就是根据样本相邻最近的K个数据来进行判断,看K个邻居中所属类别最多的是哪一类,则将该样本分为这一类。

有一分热,发一分光。 8580

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

机器学习:KNN算法对鸢尾花进行分类

Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性iris以鸢尾花的特征作为数据来源,常用在分类操作中。该数据集由3种不同类型的鸢尾花的50个样本数据构成。其中的一个种类与另外两个种类是线性可分离的,后两个种类是非线性可分离的。四个属性:Sepal.Length(花萼长度),单位是cm;Sepal.Width(花萼宽度),单位是cm;Petal.Length(花瓣长度),单位是cm;

weixin_51998427的博客 5906

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

sklearn中的KNN算法实现鸢尾花分类

简介 使用sklearn自带的鸢尾花数据集,通过kNN算法实现了对鸢尾花的分类。 算法思路 通过计算每个训练样例到待分类样品的距离,取和待分类样品距离最近的K个训练样例,K个样品中哪个类别的训练样例占多数,则待分类样品就属于哪个类别。 核心思想 如果一个样本在特征空间中的 k 个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。 该方法在确定分类决策上只依据...

python学习笔记一 5524

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

sklearn KNN实现鸢尾花分类

基于sklearn的KNN算法实现鸢尾花的分类

Michael的博客 3003

机器学习之KNN(一)K近邻算法sklearn实现详解

KNN算法在sklearn中的实现步骤以及参数详解

繁华三千东流水不舍昼夜的博客 7270

机器学习之KNN算法的详解(附鸢尾花分类的代码实现)

机器学习12_KNN算法(2021.05.26) 一. 解惑 KNN算法的全名是什么? KNN算法(K-NearestNeighbor)也称邻近算法,或者说K最近邻分类算法,该算法是数据挖掘分类技术中最简单的方法之一。 什么是KNN算法? KNN算法其实就是根据数据之间的相似度来进行分类。简单地说,KNN算法通过测量待分类目标与已知分类目标之间的距离来进行分类。(近朱者赤近墨者黑) 待分类的目标到已知分类目标之间的距离是怎样计算的呢? 使用欧几里得距离公式,将每个待分类目标的每个特征值和已知分类的邻居的

weixin_40247876的博客 4327

【机器学习】sklearn机器学习入门案例——使用k近邻算法进行鸢尾花分类

1 背景 这个案例恐怕已经被说的很烂了,机器学习方面不同程度的人对该案例还是有着不同的感觉。有的人追求先理解机器学习背后的理论甚至自己推导一遍相关数学公式,再用代码实现;有的人则满足于能够实现相关功能即可。凡是都有两面性,理解算法背后原理,再去实现相关算法,这个对算法理解深刻,更能融会贯通,拓展性强,但是需要有一定的数学基础以及要花费一段时间;若能够实现相关算法,知道各个参数的意义,也是能够尽快处理相关的任务,但是可拓展性就不那么好了。 当前,对于传统的机器学习算法进行很好的实现的Python包也当属skl

让算法融入生活,改变生活! 3292

机器学习原理之KNN算法以及sklearn实现Iris鸢尾花分类

一、KNN算法原理 KNN(k-nearest neighbor)算法是一种基本的分类与回归算法比较简单、直观:从给定的训练数据集中找出距离新输入的实例最近的k个实例,然后在这k个实例中类别数量最多的那个类就是我们新输入实例的最终分类结果。 伪代码: 对于输入训练集:Train={(x1,y1),(x2,y2)…(xn,yn)} 其中x为实例向量 y为该组数据对应的分类标签 输出:给定新实例x...

weixin_41822392的博客 2429
上一篇: pytorch零基础实现语义分割项目(一)——数据概况及预处理
下一篇: pytorch零基础实现语义分割项目(二)——标签转换与数据加载
艾醒(AiXing-w)
艾醒(AiXing-w) 2021年度博客之星AI领域top5 2021年度博客之星AI领域top5
博客等级 码龄7年 1万+粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾醒(AiXing-w)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值