机器学习模型——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…

【408直通车】(考研数一、二、三合集)高等数学公式全覆盖(上)

数学集合定义总结: 自然数集( N \mathbb{N} N):包括0、1、2、3等正整数,即 { 0 , 1 , 2 , … } \{0, 1, 2, \ldots\} {0,1,2,…}。 整数集( Z \mathbb{Z} Z):包括负整数、0和正整数…

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

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

代码随想录算法训练营 Day29 回溯算法5

Day29 回溯算法5 491.递增子序列 思路 跟上一题类似,需要去重 但问题是该题要求递增子序列,因此不能在一开始将数组排序,不知道这种情况如何去重 根据代码随想录 要点: 本题不可以对数组进行排序对于每一层使用uset记录取过的…

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…

JVM内存 垃圾收集器

JVM&#xff08;Java虚拟机&#xff09;内存管理和垃圾收集器是Java编程中非常重要的概念。JVM内存主要划分为几个不同的区域&#xff0c;每个区域都有其特定的用途。而垃圾收集器则是负责自动管理这些内存区域&#xff0c;回收不再使用的对象&#xff0c;以释放内存。 首先&a…

什么是双亲委派机制,如何打破双亲委派

了解双亲委派前&#xff0c;我们需要先了解下类加载器。 什么是类加载器呢 在Java中&#xff0c;类加载器&#xff08;ClassLoader&#xff09;负责将类文件加载到Java虚拟机中&#xff0c;并生成对应的 Class 对象。类加载器的分类和对应的作用如下&#xff1a; 启动类加载器…

【科研基础】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的配置、以…

【服务器】常见服务器高危端口

常见的服务器高危端口信息 端口号协议描述21FTP用于文件传输协议 (FTP)&#xff0c;用于在客户端和服务器之间传输文件。FTP 的安全性较低&#xff0c;容易受到中间人攻击。22SSH用于安全外壳协议 (SSH)&#xff0c;用于通过加密的连接远程管理服务器。尽管 SSH 是加密的&…

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

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

【ansible】Failed to connect to the host via ssh Permission denied

故障现象 yeqiangyeqiang-MS-7B23:/data/VirtualBox VMs$ ansible all -m pingnode-2 | UNREACHABLE! > { "changed": false, "msg": "Failed to connect to the host via ssh: \nAuthorized users only. All activities may be monitore…

基于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;医疗行业大部分为制药业投资交…

面向对象编程(一)

面向对象编程&#xff08;一&#xff09; 面向过程&面向对象 面向过程思想 1. 步骤清晰简单&#xff0c;第一步做什么&#xff0c;第二步做什么......2. 面对过程适合处理一些较为简单的问题面向对象思想 物以类聚&#xff0c;分类的思维模式&#xff0c;思考问题…