机器学习第14天:KNN近邻算法

 

☁️主页 Nowl

🔥专栏《机器学习实战》 《机器学习》

📑君子坐而论道,少年起而行之 

文章目录

介绍

实例

回归任务

缺点

实例

分类任务

如何选择最佳参数

结语


介绍

KNN算法的核心思想是:当我们要判断一个数据为哪一类时,我们找与它相近的一些数据,以这些数据的类别来判断新数据

实例

我们生成一些数据,看下面这张图

有两类点,红色与蓝色,这时我们再加入一个灰色的点

我们设置模型选择周围的三个点,可以看到最近的三个都是蓝色点,那么模型就会将新的数据判别为蓝色点


回归任务

尽管KNN算法主要用来做分类任务,但它也可以用来回归,新数据的值就是相近样本的平均值

缺点

由于它没有拟合参数,仅仅是找到周围样本点的平均值,在一些有趋势的曲线中它的预测往往不会很好

实例

我们创建几个样本点,可以看到这是一个完美的线性曲线,我们看看k近邻算法在这个简单任务上的表现

# 导入必要的库
from sklearn.neighbors import KNeighborsRegressor# 生成一些示例数据(假设是二维特征)
X = [[1], [2], [3], [4], [5]]
y = [[3], [6], [9], [12], [15]]x_new = [[6]]# 创建 KNN 回归器,假设 K=3
knn = KNeighborsRegressor(n_neighbors=3)# 在训练数据上拟合模型
knn.fit(X, y)# 在测试数据上进行预测
y_pred = knn.predict(x_new)print(y_pred)

在这个数据集上x为6的点y值应该是18,可是k近邻回归的特点取周围样本点的平均值,结果就会是12


分类任务

我们以上图的数据为例

# 导入KNN分类库
from sklearn.neighbors import KNeighborsClassifier# 生成一些示例数据
X = [[1, 8], [2, 5], [3, 7], [5, 13], [6, 11], [7, 14]]
y = [0, 0, 0, 1, 1, 1]x_new = [[6, 12]]# 创建 KNN 分类器,设置k=3
knn = KNeighborsClassifier(n_neighbors=3)# 在训练数据上拟合模型
knn.fit(X, y)# 进行预测
y_pred = knn.predict(x_new)print(y_pred)

n_neighbors参数设置了新数据要参考周围的多少个点,这里设置为3,代表参考相近的三个点的值

结果为1


如何选择最佳参数

由以上知识可以知道,影响KNN算法的参数是n_neighbors,那么我们可以更新n_neighbors,然后记录下每个参数模型在测试集上的损失来获得最优参数

绘制代码如下,这里主要学习思想,数据可能会在之后的机器学习实战系列中遇到

import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split, cross_val_score
import pandas as pd
import numpy as np# 读取数据
data = pd.read_csv("datasets/data-science-london-scikit-learn/train.csv", header=None)
y = pd.read_csv("datasets/data-science-london-scikit-learn/trainLabels.csv", header=None)
y = np.ravel(y)# 将数据分为训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(data, y, test_size=0.2, random_state=42)N = range(2, 26)
kfold = 10
test_acc = []
val_acc = []# 记录不同参数的准确率
for n in N:knn = KNeighborsClassifier(n_neighbors=n)knn.fit(x_train, y_train)test_acc.append(knn.score(x_train, y_train))val_acc.append(np.mean(cross_val_score(knn, x_test, y_test, cv=kfold)))# 绘制准确率曲线
plt.plot(range(2, 26), test_acc, c='b', label='test_acc')
plt.plot(range(2, 26), val_acc, c='r', label='val_acc')
plt.xlabel('Number of Neighbors')
plt.ylabel('Accuracy')
plt.title('K Neighbors vs Accuracy')
plt.legend()
plt.show()

得到准确率与交叉验证误差曲线,

可以看到n_neighbors=5时模型的准确率最好,我们最后就可以使用这个参数


结语

  • k近邻算法几乎没有训练过程,它只需要记住训练集的特征就行,以便之后进行比较,它不需要拟合什么参数
  • 可以绘制准确率曲线来找到最好的k值
  • 可以进行回归任务,但在模型情况下效果不是很好

感谢阅读,觉得有用的话就订阅下本专栏吧

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

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

相关文章

Find My键盘|苹果Find My技术与键盘结合,智能防丢,全球定位

键盘是最常用也是最主要的输入设备,通过键盘可以将英文字母、汉字、数字、标点符号等输入到计算机中,从而向计算机发出命令、输入数据等。还有一些带有各种快捷键的键盘。随着时间的推移,渐渐的市场上也出现独立的具有各种快捷功能的产品单独…

10个让UI设计更轻松的工具

UI设计软件对设计师来说非常重要。UI设计工具的使用是否直接影响到最终结果的质量,然后有人会问:UI界面设计使用什么软件?这里有一些UI设计师和那些对UI设计感兴趣的朋友列出了10个易于使用和免费的UI设计软件。 即时设计 即时设计是一款免…

【社会网络分析第6期】Ucient实操

一、导入数据处理二、核心——边缘分析三、聚类分析四、网络密度 一、导入数据处理 将数据导入Ucinet首先需要对数据进行处理。 承接上一期的数据格式:【社会网络分析第5期】gephi使用指南 原先得到的数据格式如下: 接下来打开ucinet: 之后…

HI3559AV100下对emmc总线速率的调整

先前使用3559开发板时,一直没觉得emmc会是个问题,但是最近一个国产化的项目中3559配合的是一款国产128G的emmc,因为板上面积限制,走线有点限制,导致uboot启动emmc有时候会失败。 1、报错的打印如下: MMC …

【机器视觉技术】:开创人工智能新时代

🎥 屿小夏 : 个人主页 🔥个人专栏 : IT杂谈 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑 前言🌤️ 机器视觉技术的实现☁️ 图像采集☁️ 图像处理☁️ 数据建模☁️应用展示…

Phpstudy v8.0/8.1添加 php-7.4.9

1、官网下载最新的php版本 打开Windows版的官网下载,地址:PHP For Windows: Binaries and sources Releases 页面上有不同的PHP版本,这里我们下载的是64位nts版的PHP7.4.9,php-7.4.9-nts-Win32-vc15-x64.zip。 2、解压下载的文…

segment-anything安装教程

文章目录 一. segment-anything安装教程 一. segment-anything安装教程 官网安装说明:https://github.com/facebookresearch/segment-anything anaconda下新建一个环境 conda create -n sam python3.8激活新建的环境 conda activate sam更换conda镜像源 conda config --add ch…

XUbuntu22.04之OBS30.0设置录制音频降噪(一百九十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

Nacos作为配置中心的一些知识二

11292327 问:客户端发请求给Nacos服务端,服务端这边会进行哪些处理? 答:客户端发请求给Nacos 服务端 ,服务端这边通过ConfigController类的309行的listener方法,进行处理 第一步 获取客户端请求的文件的…

中职组网络安全-web-PYsystem003.img-(环境+解析)

​ web安全渗透 1.通过URL访问http://靶机IP/1,对该页面进行渗透测试,将完成后返回的结果内容作为flag值提交; 访问该网页后发现F12被禁用,使用ctrlshifti查看 ctrlshifti 等效于 F12 flag{fc35fdc70d5fc69d269883a822c7a53e}…

SpringCloud核心组件

Eureka 注册中心,服务的注册与发现 Feign远程调用 Ribbon负载均衡,默认轮询 Hystrix 熔断 降级 Zuul微服务网关(这个组件负责网络路由,可以做统一的降级、限流、认证授权、安全) Eureka 微服务的功能主要有以下几…

有时出厂重置BIOS是解决电脑问题和保持其最佳性能的好办法,主要有两种方法

​BIOS是计算机开机时启动的第一个程序,它有助于执行一些基本的计算机操作,并管理计算机和安装在计算机上的操作系统之间的命令。与任何其他程序一样,如果在启动计算机时遇到问题或在计算机中添加了新硬件,则可能需要将BIOS重置为…

JMeter怎样测试WebSocket

一、安装WebSocket取样器 1、从JMeter插件管理器官网下载: https://jmeter-plugins.org/ 搜索websocket 1、jetty-http-9.1.2.v20140210.jar 2、jetty-io-9.1.2.v20140210.jar 3、jetty-util-9.1.2.v20140210.jar 4、websocket-api-9.1.1.v20140108.jar 5、w…

【Windows】内网穿透实现hMailServer远程发送邮件

目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpolar内网…

2023认证杯小美赛数学建模国际赛ABCD题思路及python代码分享

大家好呀,认证杯小美赛数学建模开始了,来说一下初步的选题建议吧: 首先定下主基调, 本次小美赛难度:D<A≈C<B。推荐选择D题。预计12.2中午更新D完整论文。预定论文请往后滑看完本文档链接。 A…

Day02嵌入式---按键控灯

一、简单介绍 按键控制灯开关是一种常见的嵌入式系统示例项目,它通常用于演示嵌入式系统的基本控制能力。该项目由一个或多个LED和一个按键组成。通过按下按键,可以控制LED的开关状态,从而实现灯的亮灭控制。 二、查看功能手册 2.1 查看硬件…

Windows核心编程 HOOK

目录 HOOK概述 HOOK API SetWindowsHookExA 函数(winuser.h) UnhookWindowsHookEx 函数(winuser.h) NextHookEx 函数(winuser.h) 局部钩子 全局钩子 为什么全局钩子需要用dll作为过程函数? HOOK概述 本质:Windows消系统的消息过滤器。 全局钩子…

血的教训--redis被入侵之漏洞利用复现--总览

血的教训–redis被入侵之漏洞利用复现–总览 相信大家对于自己的服务器被入侵,还是比较憎恨的,我的就被攻击了一次,总结经验,自己也是整理了这一个系列,从最基础到最后面的自己总结被攻破的步骤,非常清晰的…

操作系统 选择题 期末试题 考研真题 + 参考答案

1.(考研真题,单项选择题)单道批处理系统的主要缺点是( )。 A. CPU利用率不高 B.失去了交互性 C.不具备并行性 D.以上都不是 【参考答案】A 【解析】单道批处理系统的内存中只有一道程序,当该程序…

网络分层的分层原则

一、网络分层 网络分层是指将网络通信过程划分为不同的层次,每个层次负责不同的功能,从而实现网络通信的有效管理和协调。通常,网络分层可以分为七层,即OSI模型和四层,即TCP/IP模型。 OSI模型包括以下七层&#xff1…