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

news2024/11/18 10:27:18

 

☁️主页 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.coloradmin.cn/o/1252927.html

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

相关文章

ZKP中的哈希函数

1. 引言 后续博客: 如何选择ZK-friendly 哈希函数? 当暴露在ZK空间中时,对于普通crypto工程师来说,通常只需很少的时间就可以偶然发现一些外来的哈希函数——很可能是Poseidon。本文,将介绍ZK中高效哈希函数的历史&…

怎么给数据库某个字段建立一个前缀索引

说明:SQL调优中重要的一个环节是建立索引,其中有一条是字段值过长字段应该建立前缀索引,即根据字段值的前几位建立索引,像数据库中的密码字段、UUID字段。 因为其随机性,其实根据前几位就可以锁定某一条记录了。前缀索…

css实现图片绕中心旋转,鼠标悬浮按钮炫酷展示

vue模板中代码 <div class"contentBox clearfix home"><div class"circle"><img class"in-circle" src"../../assets/img/in-circle.png" alt""><img class"out-circle" src"../../as…

python基于DETR(DEtection TRansformer)开发构建钢铁产业产品智能自动化检测识别系统

在前文中我们基于经典的YOLOv5开发构建了钢铁产业产品智能自动化检测识别系统&#xff0c;这里本文的主要目的是想要实践应用DETR这一端到端的检测模型来开发构建钢铁产业产品智能自动化检测识别系统。 DETR (DEtection TRansformer) 是一种基于Transformer架构的端到端目标检…

字符串转换成十进制整数

编程要求 输入一个以#结束的字符串&#xff0c;本题要求滤去所有的非十六进制字符&#xff08;不分大小写&#xff09;&#xff0c;组成一个新的表示十六进制数字的字符串&#xff0c;然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”&#xff0c;则…

vue2:组件中extends的使用

上一篇文章中我对mixin的使用进行了一个使用和测试,这里对extend进行一个使用,其实extend和mixin还是有区别的。 上一篇文章:vue2:mixin混入的使用-CSDN博客 不过也是看实际的业务场景,我们也可以使用extend完成和mixin几乎一摸一样的操作。 不废话,上代码 创建extendTest.…

MySQL表连接

文章目录 MySQL内外连接1.内连接2.外连接&#xff08;1&#xff09;左外连接&#xff08;2)右外连接 3.简单案例 MySQL内外连接 1.内连接 内连接的SQL如下&#xff1a; SELECT ... FROM t1 INNER JOIN t2 ON 连接条件 [INNER JOIN t3 ON 连接条件] ... AND 其他条件;说明一下…

vulnhub靶机Aragog-1.0.2

靶机下载&#xff1a;https://download.vulnhub.com/harrypotter/Aragog-1.0.2.ova 主机发现 目标133 端口扫描 端口服务扫描 漏洞扫描 去看web 就一个图片 直接目录扫描 有点东西一个一个看&#xff08;blog里面有东西&#xff09; 这里面直接能看到wordpress 直接用wpscan…

Go 语言之 Maps 详解:创建、遍历、操作和注意事项

Maps用于以键值对的形式存储数据值。Maps中的每个元素都是一个键值对。Maps是一个无序且可更改的集合&#xff0c;不允许重复。Maps的长度是其元素的数量。您可以使用 len() 函数来查找长度。Maps的默认值是 nil。Maps保存对底层哈希表的引用。 Go语言有多种方法来创建Maps。 …

VS中如何使用Halcon

使用Halcon的本质就是调用Halcon的库&#xff0c;其主要步骤有&#xff1a; 1、将Halcon代码导出为C的.cpp文件 2、获取.cpp文件中的action函数的函数体 3、添加Halcon的动态库和静态库 4、添加action函数需要的头文件 导出halcon中的代码 a&#xff09;导出代码 b&#x…

运行软件报错找不到vcruntime140_1.dll无法继续执行代码如何解决?-常见问题

关于vcruntime140_1.dll丢失的6个解决方法。在我们使用电脑的过程中&#xff0c;有时候会遇到一些错误提示&#xff0c;其中之一就是“vcruntime140_1.dll丢失”。那么&#xff0c;究竟什么是vcruntime140_1.dll文件呢&#xff1f;又是什么原因导致了它的丢失&#xff1f;接下来…

基于uniapp+vue微信小程序的健康饮食管理系统 907m6

设计这个微信小程序系统能使用户实现不需出门就可以在手机或电脑前进行网上查询美食信息、 运动视频等功能。 本系统由用户和管理员两大模块组成。用户界面显示在应用程序中&#xff0c;管理员界面显示在后台服务中&#xff0c;通过小程序端与服务端间进行数据交互与数据传输实…

微服务实战系列之Nginx(技巧篇)

前言 今天北京早晨竟然飘了一些“雪花”&#xff0c;定睛一看&#xff0c;似雪非雪&#xff0c;像泡沫球一样&#xff0c;原来那叫“霰”。 自然中&#xff0c;雨雪霜露雾&#xff0c;因为出场太频繁&#xff0c;认识门槛较低&#xff0c;自然不费吹灰之力&#xff0c;即可享受…

电脑技巧:电脑常见蓝屏、上不了网等故障及解决办法

目录 一、电脑蓝屏 常见原因1: 病毒木马 常见原因2: 安装了不兼容的软件 二、电脑不能上网 常见原因1: 新装系统无驱动 常见原因2: DNS服务器异常 常见原因3: 硬件问题 三、电脑没声音 常见原因1: 未安装驱动 常见原因2: 硬件故障 四、电脑屏幕不显示 常见原因1: 显…

【限流配电开关】TPS2001C

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大…

物联网AI 无线连接学习之蓝牙基础篇 协议的发展

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 蓝牙由来 “蓝牙”&#xff08;Bluetooth&#xff09;原是一位在10世纪统一丹麦的国王哈拉尔 (HaralBluetooth)&#xff0c;他将当时的瑞典、芬兰与丹麦统一起来。而将“蓝牙”与后来的无线通讯技术标准关联…

SpringBoot——配置及原理

优质博文&#xff1a;IT-BLOG-CN 一、Spring Boot全局配置文件 application.properties与application.yml配置文件的作用&#xff1a;可以覆盖SpringBoot配置的默认值。 ◀ YML&#xff08;is not a Markup Language&#xff1a;不仅仅是一个标记语言&#xff09;&#xff1…

plotneuralnet和netron结合绘制模型架构图

plotneuralnet和netron结合绘制模型架构图 一、plotneuralnet 本身的操作 模型结构图的可视化&#xff0c;能直观展示模型的结构以及各个模块之间的关系。最近借助plotneuralnet python库&#xff08;windows版&#xff09;绘制了一个网络结构图&#xff0c;有一些经验和心得…

【SpringCloud】设计原则之单一职责与服务拆分

一、设计原则之单一职责 设计原则很重要的一点就是简单&#xff0c;单一职责也就是所谓的专人干专事 一个单元&#xff08;一个类、函数或微服务&#xff09;应该有且只有一个职责 无论如何&#xff0c;一个微服务不应该包含多于一个的职责 职责单一的后果之一就是职责单…

产品经理和项目经理的区别在哪里?

在当今的商业环境中&#xff0c;产品经理和项目经理扮演着两个非常重要的角色。虽然他们都是组织成功的重要推动者&#xff0c;但他们的职责和所关注的角度却有着显著的不同。 1. 职责差异 产品经理负责一个或多个产品线&#xff0c;从产品的规划到开发、推出和市场表现。他们…