机器学习模型——KNN

KNN的基本概念:

KNN(K-Nearest Neighbor)就是k个最近的邻居的意思,即每个样本都可以用它最接近的k个邻居来代表。KNN常用来处理分类问题,但也可以用来处理回归问题

核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。

相似度的衡量标准一般为距离,即距离越近相似度越高,距离越远相似度越小。

KNN算法三要素:

K值的选取

距离度量的方式

分类决策规则

K值的选择:

对于K值的选择,没有一个固定的经验(超参数)。选择较小的K值,就相当于用较小的邻域中的训练实例进行预测,训练误差会减小,容易发生过拟合,选择较大的K值,就相当于用较大邻域中的训练实例进行预测,其优点是可以减少泛华误差,缺点是训练误差会增大。K值一般根据样本的分布,选择较小的值,通常通过交叉验证选择一个合适的K值。

距离度量的方式:

欧氏距离(Euclidean Distance):这是最常用且直观的距离度量方法,它表示多维空间中两点之间的直线距离。在KNN中,欧氏距离通常用于连续数据的相似度计算。

曼哈顿距离(Manhattan Distance):也称为城市街区距离,它是沿着坐标轴测量的距离,适合用于城市地图中的距离计算,其中不能直接穿过建筑物或街区。在KNN中,当处理离散数据或者特征之间相互独立时,曼哈顿距离可能会被使用。

切比雪夫距离(Chebyshev Distance):在无限维的多项式空间中,切比雪夫距离是最大值范数,即各坐标数值差的最大值。这种距离度量方式适用于当一个属性对结果的影响非常显著时的场景。

除了上述三种,还有明可夫斯基距离(Minkowski Distance)余弦相似度(Cosine Similarity)等其他距离度量方式

KNN的优缺点:

KNN算法的优点:

理论成熟,思想简单,

既可以用来做分类也可以用来做回归;

可用于非线性分类; 对数据没有假设,准确度高,对噪声不敏感。

KNN算法的缺点:

计算量大;

样本不平衡问题 (即有些类别的样本数量很多,而其它样本的数量很少);

需要大量的内存。

KNN算法内参数:

n_neighbors:K值

即K值,邻近点的个数

weights:权重

{‘uniform’, ‘distance’}, callable or None, default=’uniform’

unifrom:表示权重相同,即只按照邻近点的多少判断其属于哪一类。

distance:表示权重于距离相关,距离近的点权重高,可能按照最近点来判断属于哪一类点

algorithm:计算临近点所用算法

brute:暴力法,即计算出所有点的距离,选择最近的几个点。

kd树:具体原理较为复杂,推荐大家

https://www.cnblogs.com/ssyfj/p/13053055.html     这里kd树的原理解释的非常清楚

ball_tree:kd树一般用于20维以下,而kd树一旦超过20维,效果会不尽人意,因此ball_tree就是为了解决高维问题而提出的,具体原理大家可以去网上学习一下原理。

p:默认值为2,表示Minkowski度量的幂参数

当p=1时,等效于使用曼哈顿距离(l1),当p=2时,等效于使用欧几里得距离(l2)。对于任意p,使用Minkowski距离(l_p)。此参数应为正数。

metric:距离的计算方式

比如:欧氏距离,曼哈顿距离等,默认为:minkowski

代码实现:

from sklearn.neighbors import KNeighborsClassifier,KNeighborsRegressor   #C是处理分类,R是处理回归
from sklearn.datasets import load_winewine = load_wine()X = wine.data
y = wine.targetknn = KNeighborsClassifier(n_neighbors=5)from sklearn.model_selection import train_test_splitX_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=42)knn.fit(X_train,y_train)print(knn.score(X_test,y_test))#  结果为:0.7407407407407407# 可以看到结果并不是很好,所以我们进行优化,调参from sklearn.neighbors import KNeighborsClassifier,KNeighborsRegressor   #C是处理分类,R是处理回归
from sklearn.datasets import load_winewine = load_wine()X = wine.data
y = wine.targetknn = KNeighborsClassifier(n_neighbors=10)from sklearn.model_selection import train_test_splitX_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=42)# print(knn.score(X_test,y_test))from sklearn.preprocessing import StandardScaler
from sklearn.metrics import confusion_matrixss = StandardScaler()
ss.fit(X_train)
X_train = ss.transform(X_train)
X_test = ss.transform(X_test)knn.fit(X_train,y_train)cm = confusion_matrix(y_true=y_test,y_pred=knn.predict(X_test))import seaborn as sns
import matplotlib.pyplot as pltsns.heatmap(cm,annot=True,cmap="Blues")
print(knn.score(X_test,y_test))
plt.show()# 结果:0.9629629629629629
# 可以看出,调参后准确率有明显改变

上述是处理分类问题: 对于回归问题我们怎么做呢

import numpy as np
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import train_test_split# 创建数据集
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]])
y = np.array([2, 4, 6, 8, 10])# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建KNN回归模型
knn = KNeighborsRegressor(n_neighbors=3)# 训练模型
knn.fit(X_train, y_train)# 预测
y_pred = knn.predict(X_test)# 将预测值打印出来
print(y_pred)

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

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

相关文章

python实现在线 ChatGLM调用

python实现在线 ChatGLM调用 1. 申请调用权限: 收钱进入到质谱AI开放平台,点击“开始使用”或者“开发者工具台”进行注册: 对于需要使用 API key 来搭建应用的话,需要点击右边红框中的查看 API key,就会进入到我们…

yolov8 pose keypoint解读

yolov8进行关键点检测的代码如下: from ultralytics import YOLO# Load a model model YOLO(yolov8n.pt) # pretrained YOLOv8n model# Run batched inference on a list of images results model([im1.jpg, im2.jpg]) # return a list of Results objects# Pr…

读所罗门的密码笔记04_社会信用

1. 人工智能 1.1. 人工智能可以帮助人们处理复杂的大气问题,完善现有的气候变化模拟,帮助我们更好地了解人类活动对环境造成的危害,以及如何减少这种危害 1.2. 人工智能也有助于减少森林退化和非法砍伐 1.3. 人工智能甚至可以将我们从枯燥…

RISC-V特权架构 - 中断定义

RISC-V特权架构 - 中断定义 1 中断类型1.1 外部中断1.2 计时器中断1.3 软件中断1.4 调试中断 2 中断屏蔽3 中断等待4 中断优先级与仲裁5 中断嵌套6 异常相关寄存器 本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 中断类型 RISC-V 架构定义的中…

idea打开文件乱码,设置编码

idea整个项目都设置了utf-8了,但是还是有一个文件是其他编码_(ཀ」 ∠)__ 。 配置项目编码 在设置中设置编码 配置具体目录的编码 上面的设置之后,还是有几个文件一直是乱码,需要单独配置。 偶尔引入的依赖中的文件也会乱码,需…

题目:摆花(蓝桥OJ 0389)

问题描述&#xff1a; 题解&#xff1a; #include <bits/stdc.h> using namespace std; using ll long long; const int N 105; const ll p 1e6 7; ll a[N], dp[N][N];int main() {int n, m; cin >> n >> m;for(int i 1; i < n; i)cin >> a[i…

【科研基础】VAE: Auto-encoding Variational Bayes

[1]Kingma, Diederik P., and Max Welling. “Auto-encoding variational bayes.” arXiv preprint arXiv:1312.6114 (2013). [2] [论文简析]VAE: Auto-encoding Variational Bayes[1312.6114] [3] The Reparameterization Trick [4] 变分法的基本原理是什么? 文章目录 1-…

我的编程之路:从非计算机专业到Java开发工程师的成长之路 | 学习路线 | Java | 零基础 | 学习资源 | 自学

小伙伴们好&#xff0c;我是「 行走的程序喵」&#xff0c;感谢您阅读本文&#xff0c;欢迎三连~ &#x1f63b; 【Java基础】专栏&#xff0c;Java基础知识全面详解&#xff1a;&#x1f449;点击直达 &#x1f431; 【Mybatis框架】专栏&#xff0c;入门到基于XML的配置、以…

负荷频率控制LFC,自抗扰ADRC控制,麻雀SSA算法优化自抗扰参数,两区域二次调频simulink/matlab

红色曲线为优化结果&#xff0c;蓝色曲线为没有自抗扰和没有优化的结果&#xff01;

基于springboot实现蜗牛兼职网平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现蜗牛兼职网平台系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;蜗牛兼职网当然也不能排除在外。蜗牛兼职网是以实际运用为开发背景&#xff…

【C语言】多文件编程以及static关键字

1、多文件编程 把函数声明放在头文件xxx.h中&#xff0c;在主函数中包含相应头文件在头文件对应的xxx.c中实现xxx.h声明的函数 a、主文件 #include<stdio.h> #include "MyMain.h"//需要包含头文件&#xff0c;头文件包含我们自定义的函数int main(){int num…

6、鸿蒙学习-Stage模型应用程序包结构

基于Stage模型开发的应用&#xff0c;经编译打包后&#xff0c;其应用程序的结构如下图应用程序包结构&#xff08;Stage模型&#xff09;所示。开发者需要熟悉应用程序包结构相关的基本概念。 一、在开发态&#xff0c;一个应用包含一个或者多个Module&#xff0c;可以在DevE…

【管理咨询宝藏60】顶级咨询公司对医药行业的研究报告

【管理咨询宝藏60】顶级咨询公司对医药行业的研究报告 【格式】PDF 【关键词】医疗行业、战略咨询、行业洞察 【核心观点】 - 195页精品内容&#xff0c;让你彻底透视医疗行业的发展现状和未来趋势 - 前20大交易约占医疗交易总额的65%&#xff1b;医疗行业大部分为制药业投资交…

c++的学习之路:5、类和对象(1)

一、面向对象和面向过程 在说这个定义时&#xff0c;我就拿c语言举例&#xff0c;在c语言写程序的时候&#xff0c;基本上就是缺什么函数&#xff0c;就去手搓一个函数&#xff0c;写的程序也只是调用函数的&#xff0c;而c就是基于面向对象的开发&#xff0c;他关注的不再是单…

DFS算法(C/C++)(内含立例题)

DFS&#xff1a; DFS又称深度优先搜索&#xff0c;是一种图运算方法&#xff0c;它从第一个节点走起&#xff0c;一直往下走&#xff0c;一直走到不能继续再走&#xff0c;就返回上一个节点&#xff0c;继续搜索其他地方&#xff0c;直到找到目标节点为止。 DFS可以解决迷宫问…

每日一题 --- 有效的字母异位词[力扣][Go]

有效的字母异位词 题目&#xff1a;242. 有效的字母异位词 给定两个字符串 *s* 和 *t* &#xff0c;编写一个函数来判断 *t* 是否是 *s* 的字母异位词。 **注意&#xff1a;**若 *s* 和 *t* 中每个字符出现的次数都相同&#xff0c;则称 *s* 和 *t* 互为字母异位词。 示例 …

基于单片机多功能智能台灯设计

**单片机设计介绍&#xff0c;基于单片机多功能智能台灯设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的多功能智能台灯设计是一个集硬件与软件于一体的综合性项目&#xff0c;旨在为用户提供更加便捷、舒适和节…

安静:内向性格的竞争力 - 三余书屋 3ysw.net

精读文稿 这期我们介绍的这本书叫做《安静》&#xff0c;副标题是《内向性格的竞争力》。本书共有267页&#xff0c;我会用大约25分钟的时间为你讲述书中的精髓。内向性格具备什么样的竞争力&#xff1f;内向性格的人在人际交往和日常生活中似乎总是吃亏&#xff0c;因为他们不…

[AutoSar]BSW_ECUC模块介绍

目录 关键词平台说明一、ECUC 的定义二、Definition of Partitions三、Variant Resolver Description四、Definition of PDUs 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c; EB芯片厂商TI 英飞凌编程语言C&#xf…

YOLOv5 | 鬼魅(幽灵)卷积 | 改进Ghost卷积轻量化网络

目录 原理简介 代码实现 yaml文件实现 检查是否添加执行成功 完整代码分享 论文创新必备 启动命令 由于内存和计算资源有限&#xff0c;在嵌入式设备上部署卷积神经网络 (CNN) 很困难。特征图中的冗余是那些成功的 CNN 的一个重要特征&#xff0c;但在神经架构设计中很…