机器学习算法——KNN

一、KNN算法简介

1.KNN思想

(1)K-近邻算法

  • 根据你的“邻居”来推断你是什么类别

  • KNN算法思想:如果一个样本在特征空间(训练集)中的k个最相似的样本中的大多数属于某一个类别。则该样本也属于这个类别

(2)样本相似性

  • 样本都是属于一个任务数据集的,样本距离越近则越相似

  • 计算样本距离

    • 欧氏距离: ∑ i = 1 n ( x i − y i ) 2 \sqrt{\sum_{i=1}^n(x_i-y_i)^2} i=1n(xiyi)2

(3)分类问题处理流程

  • 距离计算: 使用欧氏距离计算未知样本到每个训练样本的距离
  • 排序规则: 将所有训练样本按距离从小到大排序
  • K值选择: 选取距离最近的K个样本(K值由程序员预先设定)
  • 表决机制: 统计K个样本中多数类别,将该类别作为未知样本的预测结果

(4)回归问题处理流程

  • 距离计算: 使用欧氏距离计算未知样本到每个训练样本的距离
  • 排序规则: 将所有训练样本按距离从小到大排序
  • K值选择: 选取距离最近的K个样本(K值由程序员预先设定)
  • 表决机制: 对K个样本的标签值(目标值)取平均值,作为未知样本预测的值

(5)K值设置

a. K值过小
  • 异常值敏感:当K=1时,若最近邻是异常值,预测结果会完全错误
  • 模型复杂度:K值减小会使模型变复杂,容易发生过拟合
  • 学习偏差:会学到训练集中不该学的噪声特征,如当K=1时可能错误学习异常点的特征
b. K值过大
  • 样本均衡问题:当K=N(训练样本总数)时,预测结果总是训练集中最多的类别
  • 模型简化:K值增大会使模型变得过于简单,导致欠拟合
c. K值选择的经验法则
  • 二分类问题:避免选择2的倍数(如2、4等)
  • 三分类问题:避免选择3的倍数(如3、6等)
  • 五分类问题:避免选择5的倍数
d. K值调优方法

交叉验证网格搜索

  • 通用方法:适用于所有算法的超参数调优
  • 实现方式:通过交叉验证评估不同K值表现,网格搜索寻找最优参数
  • 注意事项:调优过程需考虑计算成本与模型性能的平衡

二、KNN算法API

1.KNN分类API

# 1.工具包
from sklearn.neighbors import KNeighborsClassifier# 2.数据(特征处理)
x = [[0],[1],[2],[3],[4]]
y = [0,0,1,1,1]# 3.实例化
model = KNeighborsClassifier(n_neighbors=3) # 二分类,避免设置成2的倍数# 4.训练
model.fit(x,y)# 5.预测
print(model.predict([[5]])) # 输出[1]
  • 多维特征处理

    • 特征可以是任意维度,如三维特征:  X = [ [ 0 , 2 , 3 ] , [ 1 , 3 , 4 ] , [ 3 , 5 , 6 ] ] X=[[0,2,3],[1,3,4],[3,5,6]] X=[[0,2,3],[1,3,4],[3,5,6]]
    • 预测时输入特征维度必须与训练数据一致
  • 变量命名:

    • 模型实例可命名为estimator或model
    • 预测结果通常保存到变量如myret
  • 注意事项

    • 分类和回归使用不同API,不能混用
    • 输入数据必须是二维数组格式,即使单个样本也要用双层括号
    • 特征工程可以插入在数据准备和模型训练之间
    • 预测结果打印使用print函数查看

2.KNN回归API

# 1.工具包
from sklearn.neighbors import KNeighborsRegressor# 2.数据(特征工程)
x = [[0],[1],[2],[3]]
y = [0.1,0.2,0.3,0.4]  # 目标值是连续的# 3.实例化
model = KNeighborRegressor(n_neighbors=3)# 4.训练
model.fit(x,y)# 5.预测
print(model.predict([[5]])) # 输出[0.3]

三、距离度量

1.欧氏距离

∑ i = 1 n ( x i − y i ) 2 \sqrt{\sum_{i=1}^n(x_i-y_i)^2} i=1n(xiyi)2

2.曼哈顿距离

  • 别称:城市街区距离(City Block distance)
  • 几何意义:在横平竖直的街区道路中,从一个点到另一个点需要行走的最短路径长度
  • 二维公式:点 a ( x 1 , y 1 ) a(x1,y1) a(x1,y1) b ( x 2 , y 2 ) b(x2,y2) b(x2,y2)间距离为 d 12 = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ d_{12}=|x_1-x_2|+|y_1-y_2| d12=x1x2+y1y2
  • n维公式: d = ∑ n ∣ x i − x j ∣ d=\sum^n|x_i-x_j| d=nxixj
  • 计算原理:对应坐标相减取绝对值后求和

3.切比雪夫距离

  • 计算公式: 二维平面两点 a ( x 1 , y 1 ) a(x_1,y_1) a(x1,y1) b ( x 2 , y 2 ) b(x_2,y_2) b(x2,y2)间的切比雪夫距离为

    d 12 = max ⁡ ( ∣ x 1 − x 2 ∣ , ∣ y 1 − y 2 ∣ ) d_{12} = \max(|x_1 - x_2|, |y_1 - y_2|) d12=max(x1x2,y1y2)

  • 移动特性: 相比只能沿 x y xy xy方向走的曼哈顿距离,切比雪夫距离允许沿45度对角线方向移动,这是其核心改变。

4.闵可夫斯基距离

    • 统一形式:可将欧氏距离和曼哈顿距离统一为闵可夫斯基距离

      d 12 = ∑ k = 1 n ∣ x 1 k − x 2 k ∣ p p d_{12} = \sqrt[p]{\sum_{k=1}^n |x_{1k}-x_{2k}|^p} d12=pk=1nx1kx2kp

    • 参数关系:

      • p = 1 p=1 p=1时为曼哈顿距离
      • p = 2 p=2 p=2时为欧氏距离
      • p → ∞ p\to\infty p时为切比雪夫距离

5.其他距离

余弦距离、马式距离(不通用)

四、特征预处理

1.原因

当特征的单位或大小相差较大,或某特征的方差比其他特征大出几个数量级时,会影响(支配)目标结果,使模型无法有效学习其他特征。

2.归一化

  • 定义:将原始数据通过线性变换映射到指定范围(默认[0,1])的方法。

  • 基本公式: ⁡ X ′ = x − min ⁡ max ⁡ − min ⁡ ⁡X^{\prime} = \frac{x - \min}{\max - \min} X=maxminxmin

  • 扩展公式:若需映射到 [ m i , m x ] [mi,mx] [mi,mx]范围,则

    X ′ ′ = X ′ ∗ ( m x − m i ) + m i X^{\prime\prime} = X^{\prime} * (mx - mi) + mi X′′=X(mxmi)+mi

  • 特点与适用场景

    • 异常值敏感:受最大值最小值影响大,若存在异常值(如年龄特征出现200岁)会显著影响归一化结果。
    • 适用场景:适合取值范围固定且无异常值的数据(如图像像素值固定为0-255)。
    • 不适用场景:不适合大规模数据或存在异常值的情况。
  • API

# 1.导入工具包
from sklearn.preprocessing import MinMaxScaler# 2.数据(只有特征)
x = [[90,2,10,40],[60,4,15,45],[75,3,13,46]]# 3.实例化
process = MinMaxScaler()# 4.fit_transform处理
data = process.fit_transform(x)

3.标准化

  • 通过对原始数据进行标准化,转换为均值为0,标准差为1的标准正态分布的数据

  • 公式: x ′ = x − m e a n σ x^{\prime}=\frac{x-mean}{\sigma} x=σxmean σ 为特征的标准差 \sigma为特征的标准差 σ为特征的标准差

  • 少量的异常值对于平均值的形象并不大,鲁棒性更强,优先选择

  • API

# 1.导入工具包
from sklearn.preprocessing import StandardScaler# 2.数据(只有特征)
x = [[90,2,10,40],[60,4,15,45],[75,3,13,46]]# 3.实例化
process = StandardScaler()# 4.fit_transform处理
data = process.fit_transform(x)print(data)
print(process.mean_)
print(process.var_)

五、超参数选择

1.交叉验证

  • 核心思想: 将训练集划分为n份,每次取1份作为验证集,其余n-1份作为训练集,循环n次
  • 验证集作用: 与测试集功能相同,用于评估模型效果
  • 折数命名: 根据划分份数称为n折交叉验证(如4份即四折交叉验证)
  • 评估方式: 取多次验证结果的平均值作为最终模型评分,比单次划分更可靠

2.网格搜索

  • 产生背景: 模型存在多个需人工设置的超参数(如KNN的k值),不同参数组合效果差异大
  • 工作原理:
    • 预设参数候选值(如k=3,4,5,6)
    • 对每个参数组合进行交叉验证评估
    • 自动选择最优参数组合(如k=5时准确率86%最高)
  • 优势特点: 避免手动调参的低效,自动完成参数组合、训练、评估全流程

3.联系

  • 关键区别:
    • 交叉验证是数据集划分方法
    • 网格搜索是参数优化工具
  • 最佳实践: 两者结合使用可形成完整的模型调优方案
  • 注意事项: 仅对需要人工设置的超参数使用该方法,模型自动学习的参数不适用

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

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

相关文章

如何评估CAN总线信号质量

CAN总线网络的性能在很大程度上取决于其信号质量。信号质量差可能导致通信错误,进而引发系统故障、效率降低甚至安全隐患。因此,评估和确保CAN总线信号质量是维护系统健康和可靠性的关键。 在CAN总线网络中,数据通过双绞线上的差分信号传输。…

封装一个小程序选择器(可多选、单选、搜索)

组件 <template><view class"popup" v-show"show"><view class"bg" tap"cancelMultiple"></view><view class"selectMultiple"><view class"multipleBody"><view class&…

2.1HarmonyOS NEXT开发工具链进阶:DevEco Studio深度实践

HarmonyOS NEXT开发工具链进阶&#xff1a;DevEco Studio深度实践 在HarmonyOS NEXT全栈自研的技术体系下&#xff0c;DevEco Studio作为一站式开发平台&#xff0c;通过深度整合分布式开发能力&#xff0c;为开发者提供了从代码编写到多端部署的全流程支持。本章节将围绕多设…

LLMs之Tool:Workflow Use的简介、特点、安装和使用方法、以及案例应用

LLMs之Tool&#xff1a;Workflow Use的简介、特点、安装和使用方法、以及案例应用 目录 Workflow Use的简介 1、Workflow Use的特点 2、Workflow Use的愿景和路线图 Workflow Use的安装和使用方法 1、安装 2、使用方法 查看所有命令 从 Python 中使用&#xff1a; 启动…

二分法算法技巧-思维提升

背景&#xff1a; 在写力扣题目“搜素插入位置 ”时&#xff0c;发现二分法的一个细节点&#xff0c;打算记录下来&#xff0c;先看一张图&#xff1a; 我们知道&#xff0c;排序数组&#xff0c;更高效的是二分查找法~~~而二分法就是切割中间&#xff0c;定义left是最开始的&…

Python 训练营打卡 Day 40

训练和测试的规范写法 一、黑白图片的规范写法&#xff0c;以MNIST数据集为例 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms # 用于加载MNIST数据集 from torch.utils.data import DataLoader # 用于创建…

数据结构之栈:原理与常用方法

1. 栈的定义 Stack是Vector的一个子类&#xff0c;它实现标准的后进先出堆栈。Stack只定义了创建空堆栈的默认构造方法。&#xff08;实际上是实现了List接口&#xff0c;因为Vector是List的子类&#xff09;。 Stack() // 创建一个空栈 2. 栈的基本操作 // 压栈操作 publi…

鸿蒙OSUniApp 开发支持图片和视频的多媒体展示组件#三方框架 #Uniapp

使用 UniApp 开发支持图片和视频的多媒体展示组件 前言 在现代移动应用中&#xff0c;图片和视频已成为内容展示的主流形式。一个优秀的多媒体展示组件不仅能提升用户体验&#xff0c;还能增强产品的互动性和视觉冲击力。随着鸿蒙&#xff08;HarmonyOS&#xff09;生态的不断…

STM32CubeMX,arm-none-eabi-gcc简单试用

在windows下&#xff0c;为stm32系列单片机编程&#xff0c;keil有了免费的试用版&#xff0c;有很多开发板示例&#xff0c;给学习单片机编程带来很大的方便。 STM32CubeMX提供了stm32单片机的功能设置&#xff0c;在输出方式上给出了几种方式&#xff0c;有mdk&#xff08;k…

灌水论坛系统总体设计文档

一、实验题目 灌水论坛系统 二、实验目的 旨在通过一个相对完整且功能丰富的Web应用实例&#xff0c;全面地实践和巩固Web开发所需的各项核心技术和工程方法&#xff0c;从而提升其综合应用能力和解决实际开发问题的能力。它不仅仅是完成一个软件&#xff0c;更是一个学习、…

Android 13中 配置签名文件与内置相应的Apk

目录 1.问题场景 2.实现思路 3.将测试代码做成APK并配置签名 4.将apk内置到系统当中的方法 1.问题场景 在展讯平台中Android13的源码已知的情况下&#xff0c;客户写了一个测试类用于调用系统中的一些接口来检验一些功能。为了方便调试排查问题我首先的思路是将客户写的测试…

HarmonyOS 5 应用开发导读:从入门到实践

一、HarmonyOS 5 概述 HarmonyOS 5 是华为推出的新一代分布式操作系统&#xff0c;其核心设计理念是"一次开发&#xff0c;多端部署"。与传统的移动操作系统不同&#xff0c;HarmonyOS 5 提供了更强大的跨设备协同能力&#xff0c;支持手机、平板、智能穿戴、智慧屏…

C语言创意编程:用趣味实例玩转基础语法(4)

文章目录 0. 前言1. &#x1f308; 彩虹文字生成器1.1 程序效果展示1.2 完整代码解析1.3 关键技术详解1.3.1 Windows控制台API1.3.2 颜色编码1.3.3 安全输入1.3.4 跨平台考虑 2. &#x1f3b5; 简易音乐播放器2.1 程序效果展示2.2 完整代码解析2.3 关键技术详解2.3.1 Windows B…

【专题】神经网络期末复习资料(题库)

神经网络期末复习资料&#xff08;题库&#xff09; 链接&#xff1a;https://blog.csdn.net/Pqf18064375973/article/details/148332887?sharetypeblogdetail&sharerId148332887&sharereferPC&sharesourcePqf18064375973&sharefrommp_from_link 【测试】 Th…

Python训练营打卡 Day41

简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; 1. 输入 → 卷积层 → Batch…

leetcode216.组合总和III:回溯算法中多条件约束下的状态管理

一、题目深度解析与组合约束条件 题目描述 找出所有相加之和为n的k个数的组合&#xff0c;且满足以下条件&#xff1a; 每个数只能使用一次&#xff08;范围为1到9&#xff09;所有数字均为唯一的正整数组合中的数字按升序排列 例如&#xff0c;当k3&#xff0c;n9时&#…

Java面试实战:从Spring到大数据的全栈挑战

Java面试实战&#xff1a;从Spring到大数据的全栈挑战 在某家知名互联网大厂&#xff0c;严肃的面试官正在面试一位名叫谢飞机的程序员。谢飞机以其搞笑的回答和对Java技术栈的独特见解而闻名。 第一轮&#xff1a;Spring与微服务的探索 面试官&#xff1a;“请你谈谈Spring…

基于vue框架的动物园饲养管理系统a7s60(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;饲养员,健康登记,工作进度,动物信息,进食信息,动物健康,动物医治,饲料信息,工作留言 开题报告内容 基于Vue框架的动物园饲养管理系统开题报告 一、研究背景与意义 &#xff08;一&#xff09;研究背景 随着城市化进程加快和公众对生…

docker镜像与dockerfile

一、docker镜像 1.什么是镜像 容器解决应用开发、测试和部署的问题&#xff0c;而镜像解决应用部署环境问题。镜像是一个只读的容器模板&#xff0c; 打包了应用程序和应用程序所依赖的文件系统以及启动容器的配置文件&#xff0c;是启动容器的基础。镜像所打 包的文件内容就是…

流媒体基础解析:音视频封装格式与传输协议

在视频处理与传输的完整流程中&#xff0c;音视频封装格式和传输协议扮演着至关重要的角色。它们不仅决定了视频文件的存储方式&#xff0c;还影响着视频在网络上的传输效率和播放体验。今天&#xff0c;我们将深入探讨音视频封装格式和传输协议的相关知识。 音视频封装格式 什…