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

机器学习中KNN算法介绍

一、核心思想

1.定义

        K - 近邻算法(K Nearest Neighbor,KNN)是一种基于实例的学习方法,通过样本的 “邻居” 来推断其类别,例如一个样本在特征空间中的 k 个最相似(距离最近)的样本中,大多数属于某一类别,则该样本也属于此类别。

        根据样本间的距离衡量相似性,距离越近则越相似。

2.分类与回归流程

        分类流程

                1.计算未知样本与所有训练样本的距离;

                2.按距离升序排列训练样本;

                3. 选取距离最近的 k 个样本;

                4.对这 k 个样本的类别进行多数表决,未知样本归属到出现次数最多的类别。  

        回归流程

                1.计算未知样本与所有训练样本的距离;

                2.按距离升序排列训练样本;

                3.选取距离最近的 k 个样本;

                4.计算k 个样本目标值的平均值;

                5.以此平均值作为未知样本的预测值。

3.K值选择

        若K值过小:模型复杂,易受异常点的影响,可能会照成过拟合

        若K值过大:模型简单,易受样本均值影响,可能会照成欠拟合

        极端情况:当K值等于训练样本总数时,会直接选取训练集中数量最多的那个而忽视了其他信息。

二:KNN算法API介绍

        1.分类API

                sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)

                参数n_neighbors:指定邻居数量(默认5)

                示例:通过简单数据集训练模型,预测新样本类别。

        2.回归API

                sklearn.neighbors.KNeighborsRegressor(n_neighbors=5)

                 功能:用于回归问题,预测连续值

                示例:通过多特征数据集训练,预测新样本的目标值。

        3.常见错误

                预测输入格式错误:如predict([1])应改为predict([[1]])(需要传入二维数组)

三、距离度量

        1.欧式距离

                定义:空间中两点的直线距离,是最常用的距离度量方式。

                二维空间:d12​=(x1​−x2​)2+(y1​−y2​)2​

                n维空间:d12​=∑k=1n​(x1k​−x2k​)2​

        2.曼哈顿距离

                别称:城市街区距离

                定义:两点在各维度上的绝对差值之和

                二维空间:d12​=∣x1​−x2​∣+∣y1​−y2​∣

                n维空间:d12​=∑k=1n​∣x1k​−x2k​∣

        3.切比雪夫距离

                定义:两点在各维度上绝对差值的最大值。

                二维空间:d12​=max(∣x1​−x2​∣,∣y1​−y2​∣)

                n维空间:d12​=max(∣x1k​−x2k​∣)

        4.闵可夫斯基距离

                定义:对多种距离的概括性表述,公式为d=(∑k=1n​∣x1k​−x2k​∣p)**1/p

                        当 p=1 时,为曼哈顿距离;

                        当p=2 时,为欧氏距离;

                        当 p→∞时,为切比雪夫距离。

四、特征预处理

        1.必要性

                当特征单位或大小差异大时,可能导致模型受某一特征支配,需通过预处理消除这种影响。      

        2.归一化

                定义:将数据映射到 [0,1](默认)或指定区间 [mi, mx]。

                        公式:x` = (x-min)/(max-min) ,x`` = x`*(max - min)+min

                API:sklearn.preprocessing.MinMaxScaler(feature_range=(0,1))

                缺点:受异常值的影响大,鲁棒性差,适合小数据场景

        3.标准化

                定义:将数据转换为均值为 0、标准差为 1 的标准正态分布数据。

                        公式:x` = (x-mean)/σ(mean 为均值,σ 为标准差) 

                API:sklearn.preprocessing.StandardScaler()

                优点:受异常值影响小,适合大数据场景。

        4.鸢尾花案例

                流程:获取数据集→划分训练集和测试集→标准化处理→训练 KNN 模型→评估准确率(如使用score函数或accuracy_score方法)→预测新样本。

五、超参数选择方法

        1.交叉验证

                定义:将训练集划分为 n 份,轮流用 1 份作为验证集、其余 n-1 份作为训练集,多次评估取平均值,提高模型评分的可信度。

                作用:更可靠地评估模型性能,减少数据划分带来的误差。

        2.网格搜索

                定义:自动尝试超参数的不同组合,结合交叉验证评估,选出最优参数组合。

                API:sklearn.model_selection.GridSearchCV(estimator,param_grid,cv)

                cv:交叉验证的折数。

                结果分析:通过best_score_(最优交叉验证得分)、best_estimator_(最优模型)等属性查看结果。

          3.手写数字案例

                数据:MNIST 数据集,包含 0-9 的手写数字图像(28×28 像素,784 个特征)。

                流程:加载数据→归一化(像素值缩放到 [0,1])→划分数据集→网格搜索调优超参数→训练模型→评估与预测。

六、KNN模型评估

        1.KNN的优缺点

                优点:简单易懂,无需训练过程,可处理多分类问题。

                缺点:计算复杂度高(需计算与所有样本的距离),对高维数据敏感(维度灾难)。

        2.特征预处理的选择

                标准化在大多数机器学习场景中更常用,因其对异常值更稳健;归一化适用于特征取值范围明确的场景。

        3.超参数调优的重要性

                K 值等超参数直接影响模型性能,交叉验证结合网格搜索是实用的调优手段,尤其适合小到中等规模的数据集。

http://www.xdnf.cn/news/1403011.html

相关文章:

  • static静态文件和requests请求对象
  • 前端浏览器调试
  • 函数(1)
  • 3.kafka常用命令
  • 【CMake】静态库(编译-链接-安装)完整示例
  • AI工具营销落地方案:工业产品营销
  • 编程与数学 03-004 数据库系统概论 08_逻辑结构设计
  • 【Canvas与盾牌】美国队长之盾卡通版
  • java报错问题解析
  • Dify 从入门到精通(第 65/100 篇):Dify 的自动化测试(进阶篇)
  • 疯狂星期四文案网第55天运营日记
  • 2024年INS SCI2区,基于快速成本评估和蚁群优化算法的多无人地面飞行器分层任务规划,深度解析+性能实测
  • C++/QT day2(8.30)
  • 【Python+requests】解决Python requests中的ProxyError:SSL版本错误问题详解
  • 笔记共享平台|基于Java+vue的读书笔记共享平台系统(源码+数据库+文档)
  • 简历书写---自我评价怎么写
  • offsetof宏的实现
  • Cybero: 1靶场渗透
  • HarmonyOS 应用开发:基于API 12及以上的现代化实践
  • 华为对“业务对象”是怎样定义与应用的?
  • Windows系统提示“找不到文件‘javaw‘”
  • react虚拟列表实现及原理
  • Git与DevOps实战:从版本控制到自动化部署
  • docker 启动一个clickhouse , docker 创建ck数据库
  • 介绍分布式事务之Seata
  • 【系统分析师】高分论文:论系统测试技术及应用
  • IAR工程如何搭建vscode+clangd编辑环境
  • day42-Ansible
  • “人工智能+”行动重磅发布!ElfBoard助力嵌入式教育智能化升级
  • 【Java】常见数据结构及方法