当前位置: 首页 > news >正文

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

前言

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

数据预处理

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

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

from sklearn.preprocessing import MinMaxScaler, StandardScalerminmaxscaler = 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鸢尾花分类(KNN)

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

操作系统引论

操作系统是管理硬件和软件的一种应用程序。操作系统是运行在计算机上最重要的一种软件,它管理计算机的资源和进程以及所有的硬件和软件。它为计算机硬件和软件提供了一种中间层,使应用软件和硬件进行分离,让我们无需关注硬件的实现&#xff0…...

优质 CS 读博 (PhD) 经验贴汇总

前言 如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。 Advice for early-stage Ph.D. students 读博的核心是在研究上取得进展,只有在研究上取得一些进展&#xff…...

SpringCloud学习笔记 - @SentinelResource的fallbackblockHandler配置详解 - sentinel

1. sentinel服务负载均衡测试 sentinel默认开启了负载均衡的轮询模式,为了测试sentinel服务负载均衡的效果,需要先创建两个服务提供者和一个服务消费者。 1.1. 分别创建两个服务提供者-支付服务9003、9004 1. 添加pom依赖: 提供者只需要将…...

华为OD机试题 - 静态扫描最优成本(JavaScript)

最近更新的博客 2023新华为OD机试题 - 斗地主(JavaScript)2023新华为OD机试题 - 箱子之形摆放(JavaScript)2023新华为OD机试题 - 考古学家(JavaScript)2023新华为OD机试题 - 相同数字的积木游戏 1(JavaScript)2023新华为OD机试题 - 最多等和不相交连续子序列(JavaScri…...

mysql大数据量批量提交

DROP PROCEDURE IF EXISTS test.insert_bacth_commit_test1;CREATE PROCEDURE test.insert_bacth_commit_test1()begindeclare start_num int default 0; -- 初始设置起始行数declare end_num int default 5;-- 初始设施结束行数declare cnt_srouce int default 0; -- 定义源表…...

IP SAN组网配置

目录一、确认网络连接畅通二、服务器端ISCSI启动器配置1.以root身份登录2.验证是否已安装iSCSI启动器3.安装iSCSI启动器4.启动iSCSI服务5.给iSCSI启动器命名6.扫描目标器7.登录目标器8.将登录目标器行为设置为自启动三、主机多路径配置四、存储配置五、主机挂载背景&#xff1a…...

面试7分看能力,3分靠嘴皮,剩下90分就靠这份Java面试八股文

有句话说的好,面试中7分靠能力,3分靠嘴皮刚开始面试的时候,介绍项目一般都是凸显我们技能的重中之重,它对一次面试的成败可以说具有决定性作用,这就涉及到我们的表达能力了,有人说我其实水平都在线&#xf…...

api接口如何对接?

对于很多产品小白或求职者而言,API接口是一个产品和研发领域的专业术语,大家可能在文章或者PRD中都已经有接触过API接口的概念。 实际上,接口的应用已经非常广泛和成熟,这个概念主要活跃在公司内部的各系统之间的衔接和对接以及公…...

毕业2年不到选择跳槽,居然拿到25K的薪资,简直了···

本人本科就读于某普通院校,毕业后通过同学的原因加入软件测试这个行业,角色也从测试小白到了目前的资深工程师,从功能测试转变为测试开发,并顺利拿下了某二线城市互联网企业的Offer,年薪 30W 。 选择和努力哪个重要&am…...

Java反序列化漏洞——CommonsCollections3链分析

一、原理CC1链中我们是通过调用Runtime.getRuntime.exec()来执行系统命令,而另一个方向我们可以通过TemplatesImpl加载字节码的类,通过调⽤其newTransformer() 方法,即可执⾏这段字节码的类构造器,我们在类构造器中加入恶意代码&a…...

英文论文(sci)解读复现【NO.5】让RepVGG再次变得更强大:一种量化感知方法

此前出了目标检测算法改进专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的SCI论文&am…...

hive学习(仅供参考)

hive搭建Hive什么是hiveHive的优势和特点hive搭建解压、改名修改环境变量添加hive-site.xml将maven架包拷贝到hive替换一下gua包使环境变量生效初始化安装成功Hive 什么是hive 将结构化的数据文件映射为数据库表 提供类sql的查询语言HQL(Hive Query Language) Hive让更多的人…...

新生儿住月子中心20天患败血症 什么是败血症?有哪些危害

12月7日,四川眉山市民唐先生说,他刚出生的儿子在妇产医院分娩中心住了20天后感染了败血症。据唐先生介绍,哈子出院时各项指标正常。他在分娩中心住了半个月左右,孩子喝牛奶异常易怒,第二天开始发烧。当天,在…...

2023年美赛赛题A题赛题公布

问题A:遭受旱灾的植物群落背景不同种类的植物对压力的反应方式不同。例如,草原是相当的对干旱敏感。干旱发生的频率和严重程度各不相同。大量的观察表明,不同物种的数量在一个物种如何生长的过程中起着重要作用植物群落在连续几代的干旱周期中适应。在一…...

交互式前端开发最好用的WebGL框架

JavaScript是创建Web最有用的编程语言之一,尤其是在WebGL库的支持下。有了WebGL,可以很方便地使用 HTML5 Canvas 元素动态生成图形。因此,设计师和开发人员很容易创建流畅的2D和3D效果。WebGL是JavaScript API或基于OpenGL的库,它…...

【Java 面试合集】包装类的缓存问题

包装类的缓存问题1. 概述 嗨,大家好,【Java 面试合集】每日一题又来了。今天我们分享的内容是:包装类的缓存问题。 我们下面的案例以Integer 为例 2. 表现 public class TestCache {public static void main(String[] args) {Integer i 127…...

JAVA PYTHONGOLANG在STR LIST MAP 等数据结构的一些底层设计

一、列表和扩容机制 JAVA的列表主要分为list和vector,list是线程不安全的。list又主要分为ArrayList和LinkedList,ArrayList底层通过object数组实现,可以实现快速查找,LinkedList底层通过双向列表实现。java常用的列表实现类为ArrayList,ArrayList的主要源码如下: publi…...

SpringMVC处理ajax请求

RequestBodyRequestBody:将请求体中的内容和控制器方法的形参进行绑定。使用RequestBody注解将json格式请求参数转换为java对象。条件&#xff1a;1. 导入jackson依赖 (默认调用jackson功能实现的)2. 在springmvc的配置文件中设置开启<mvc:annotation-driven/>3. 在处理请…...

Spire.Office 8.2.2 for NET 开年之喜

Spire.Office for .NET对文档的操作包括打开&#xff0c;创建&#xff0c;修改&#xff0c;转换&#xff0c;打印&#xff0c;浏览 Word、Excel、PowerPoint 和 PDF 文档&#xff0c;以及将数据从数据源导出为常用的文档格式&#xff0c;如&#xff1a;Word&#xff0c;Excel&a…...

python中的.nc文件处理 | 04 利用矢量边界提取NC数据

利用矢量边界提取.nc数据 import osimport numpy as np import pandas as pd import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cfeature import seaborn as sns import geopandas as gpd import earthpy as et import xarray as xr # …...

使用 PyNeuraLogic 超越 Transformers

展示神经符号编程的力量neuro-symbolic1. 简介 在过去的几年里&#xff0c;我们看到了基于 Transformer 的模型的兴起&#xff0c;并在自然语言处理或计算机视觉等许多领域取得了成功的应用。在本文[1]中&#xff0c;我们将探索一种简洁、可解释和可扩展的方式来表达深度学习模…...

微信点金计划(服务商角度)

时间&#xff1a;2023/2/17 背景&#xff1a;微信在推出点金计划后&#xff0c;原本window.WeixinJSBridge.invoke方法的回调失效了&#xff0c;需要在微信支付服务商平台&#xff5c;平台开放更多能力&#xff0c;与服务商一起成长这里进行配置&#xff0c;配置流程跟着官方给…...

2023年美赛 MCM B题 重新构想马赛马拉岛

背景肯尼亚的野生动物保护区最初主要是为了保护野生动物和其他自然资源。肯尼亚议会于2013 年通过了《野生动物保护和管理法》&#xff0c;以提供更公平的资源共享&#xff0c;并允许进行替代的、以社 区为基础的管理工作[1].此后&#xff0c;肯尼亚增加了修正案&#xff0c;以…...

指标体系的应用与搭建

一、指标体系的介绍 体系泛指一定范围内同类事物按照一定的顺序或内在联系而组成的整体。指标体系也一样&#xff0c;指的是不同指标按照一定的顺序及内部联系而组成的整体。此外&#xff0c;在指标体系中&#xff0c;除了以应用为出发点搭建&#xff0c;还会加入使用指南&…...

固态继电器的五大优势

固态继电器的优点和五个关键优势&#xff0c;现代电气控制系统因二极管、晶体管和晶闸管等固态器件的发明而得到极大的增强。对于加热器和电机等大负载设备&#xff0c;固态继电器可能比传统的机械继电器具有巨大的优势。 虽然并非适用于所有情况&#xff0c;但它们具有许多吸引…...

特征检测之HOG特征算法详解及Opencv接口使用

1. HOG特征简介 特征描述符是图像或图像补丁的表示形式&#xff0c;它通过提取有用信息并丢弃无关信息来简化图像。 通常&#xff0c;特征描述符将大小W x H x 3&#xff08;通道&#xff09;的图像转换为长度为n的特征向量/数组。对于 HOG 特征描述符&#xff0c;输入图像的…...

一款好的低代码开发平台应该是什么样?

一款好的低代码开发平台应该是什么样&#xff1f; 以企业级应用构建来讲&#xff0c;完成一个应用复杂度随着技术的进步、需求的细化、业务要求的变化并不是逐渐降低&#xff0c;而是逐渐提升。用户想要有更好的体验&#xff0c;复杂度更是成倍提升。 基于此&#xff0c;低代码…...

基于Spring cloud搭建oauth2

1&#xff0c;OAuth2.0简介 OAuth&#xff08;开发授权&#xff09;是一个开放标准&#xff0c;允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息&#xff0c;而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。 OAuth2.0是OAuth的延续&#xf…...

实现一个小程序分享图 wxml2canvas

我们经常会遇上动态生成海报的需求&#xff0c;而在小程序中&#xff0c;生成图片非Canvas莫属。但是在实际工作当中&#xff0c;为了追求效率&#xff0c;我们会不可避免地去使用一些JS插件&#xff0c;而 wxml-to-canvas 就是一款官方推荐且非常优秀的插件&#xff0c;它可以…...

怎样做网站结构优化/seo关键词搜索优化

来源&#xff1a;http://www.php.cn/csharp-article-359736.html一、过滤器简介 1.1、理解什么是过滤器 1、过滤器&#xff08;Filters&#xff09;就是向请求处理管道中注入额外的逻辑。提供了一个简单而优雅的方式来实现横切关注点。 2、所谓的过滤器&#xff08;Filters&…...

学会wordpress 怎么赚钱/网站推广seo

文章目录进程间通信介绍进程间通信的目的进程间通信的技术背景进程间通信的本质进程间通信的一些标准进程间通信意义进程间通信分类管道管道的概念管道的原理匿名管道站在文件描述符角度-深度理解管道站在内核角度-管道本质命名管道system V 共享内存共享内存的理解system V消息…...

中国建设银官方网站/营销型网站建设运营

一、前期知识储备——后台功能 诺基亚Symbian操作系统特点&#xff1a;比起一般的手机&#xff0c;它可以支持后台功能。那个时候是能够一边打电话、一边听音乐&#xff0c;一边后台挂着QQ&#xff0c;非常酷。在后来的智能手机市场中&#xff0c;IOS系统刚开始是不支持后台的&…...

仿站网站开发/怎样建网站赚钱

机器学习&#xff1a;我们为什么要参数初始化为什么要初始化&#xff1f; 上图是一个神经网络的基本结构&#xff0c;深度学习的初始化参数指的是在网络训练之前&#xff0c;对各个节点的权重和偏置进行初始化的过程&#xff0c;很多时候我们以为这个初始化是无关紧要的&…...

遵义市建设厅网站/网站推广如何引流

python更新1.官网下载安装包&#xff0c;编译安装./configure --prefix/usr/local/pythonmake && make install2.修改旧的python2.7命令 mv /usr/bin/python /usr/bin/python2.7.5链接python3.4的命令 ln -s /usr/local/python/bin/python3.4 /usr/bin/python3.yum 指向…...

网站运营部的职责/核心关键词

上篇文章中我们谈到了&#xff0c;Service的远程沟通&#xff0c;既当Activity和Service不在一个进程中&#xff0c;它们之间是怎么相互通信的&#xff0c;不过只是停留在原理层面&#xff0c;今天傻蛋写了一个测试程序来进一步说明远程沟通机制。 Android框架的IPC沟通其实是依…...