《机器学习》——KNN算法

文章目录

  • KNN算法简介
  • KNN算法——sklearn
    • sklearn是什么?
    • sklearn 安装
    • sklearn 用法
  • KNN算法 ——距离公式
  • KNN算法——实例
    • 分类问题
      • 完整代码——分类问题
    • 回归问题
      • 完整代码 ——回归问题

KNN算法简介

  • 一、KNN介绍
    • 全称是k-nearest neighbors,通过寻找k个距离最近的数据,来确定当前数据值的大小或类别。是机器学习中最为简单和经典的一个算法。

      在这里插入图片描述

  • 二、KNN算法的基本要素
    • K值的选择:K值代表选择与新测试样本距离最近的前K个训练样本数,通常K是不大于20的整数。K值的选择对算法结果有重要影响,需要通过交叉验证等方法来确定最优的K值。
    • 距离度量:常用的距离度量方式包括闵可夫斯基距离、欧氏距离、曼哈顿距离、切比雪夫距离、余弦距离等。其中,欧氏距离在KNN算法中最为常用。
    • 分类决策规则:一般采用多数投票法,即选择K个最相似数据中出现次数最多的类别作为新数据的分类。
  • 三、KNN算法的工作流程
    • 准备数据:对数据进行预处理,包括收集、清洗和归一化等步骤,以确保所有特征在计算距离时具有相等的权重。
    • 计算距离:计算测试样本点到训练集中每个样本点的距离。
    • 排序与选择:根据距离对样本点进行排序,并选择距离最小的K个样本点作为测试样本的邻居。
    • 分类决策:根据K个邻居的类别信息,采用多数投票法确定测试样本的类别。
  • 四.KNN算法的优缺点
    • 优点:
      1.简单,易于理解,易于实现,无需训练;
      2.适合对稀有事件进行分类;
      3.对异常值不敏感。
    • 缺点:
      1.样本容量比较大时,计算时间很长;
      ⒉.不均衡样本效果较差;

KNN算法——sklearn

sklearn是什么?

  • Sklearn (Scikit-Learn) 是基于 Python 语言的第三方机器学习库。它建立在 NumPy, SciPy, Pandas 和 Matplotlib库 之上,里面的 API 的设计非常好,所有对象的接口简单,很适合新手上路。

sklearn 安装

pip install scikit-learn
# 也可以自行选择版本,注意不同版本可能会有差异,还可以在后面加-i 镜像地址
# 如:
pip install scikit-learn==1.0.2 -i https://pypi.mirrors.ustc.edu.cn/simple/

sklearn 用法

  • 使用sklearn官网API:https://scikit-learn.org/,knn算法的介绍 搜索k-nearest neighbors,注意版本1.0和1.2问题。
  • sklearn中有两种KNN算法的用法:KNeighborsClassifier(分类问题), KNeighborsRegressor(回归问题),故此要使用KNN算法时首先要判断需求是分类问题还是回归问题。

KNN算法 ——距离公式

在这里插入图片描述
在这里插入图片描述

  • 等距离公式还有很多:距离公式

KNN算法——实例

分类问题

  • 导入模块
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
# sklearn中的neighbors模块的KNeighborsClassifier方法
  • 导入数据
data = np.loadtxt('datingTestSet2.txt')
# 使用numpy中的loadtxt方法读取txt文件,读取后内容为数组
  • 提取数据

    • data[:, -1]:这部分是数组的切片操作。data是一个二维数组,: 表示选取所有行,-1 表示选取最后一列。因此,data[:, -1] 获取了data数组中所有行的最后一列的数据。

    • data[:, -1] == 1:这部分将上一步得到的所有最后一列的值与1进行比较,生成一个布尔数组(或类似布尔索引的结构),其中True表示对应位置的值为1,False表示不是1

    • data[data[:, -1] == 1]:最后,这个布尔数组被用作索引来筛选data数组。具体来说,它会选取data中所有最后一列值为1的行。

x = data[:,:-1]
# 逗号前后分别代表行和列,可以看出data[:,:-1]取从头到尾的行和从头到倒数第二个的列,且最后一个不取。
y = data[:,-1]
# 取从头到尾的行和最后一列。
  • KNN模型——KNeighborsClassifier
    • API

    class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, *, weights=‘uniform’, algorithm=‘auto’, leaf_size=30, p=2, metric=‘minkowski’, metric_params=None, n_jobs=None)

    • n_neighbors : k值,邻居的个数,默认为5。【关键参数】
    • weights : 权重项,默认uniform方法。
      Uniform:所有最近邻样本的权重都一样。【一般使用这一个】
      Distance:权重和距离呈反比,距离越近的样本具有更高的权重。【确认样本分布情况,混乱使用这种形式】
      Callable:用户自定义权重。
    • algorithm :用于计算最近邻的算法。
      ball_tree:球树实现
      kd_tree:KD树实现, 是一种对n维空间中的实例点进行存储以便对其进行快速搜索的二叉树结构。
      brute:暴力实现
      auto:自动选择,权衡上述三种算法。【一般按自动即可】
    • leaf_size :空值KD树或者球树的参数,停止建子树的叶子节点的阈值。
    • p : 距离的计算方式。P=1为曼哈顿距离,p=2为欧式距离。
    • metric : 用于树的距离度量
      1.曼哈顿距离2.欧式距离3.切比雪夫距离4.闵可夫斯基距离5.带权重闵可夫斯基距离
      6 .标准化欧式距离7.马氏距离
    • metric_params :用于比较复杂的距离的度量附加参数。
neigh = KNeighborsClassifier(n_neighbors=10,p=2)
# k = 10,使用欧式距离公式计算。
  • 训练模型
neigh.fit(x,y)
# 使用KNN模型中的fit方法进行训练。
  • 测试模型
print(neigh.predict([[15004,0.08800,0.671355]]))
# neigh.predict():这是 neigh 模型的一个方法,用于对输入数据进行预测。
predict_data = [[9744,11.440364,0.760461],[16191,0.100000,0.605619],[42377,6.519522,1.058602],[27353,11.475155,1.528626]]
print(neigh.predict(predict_data))
# 测试多组数据时
  • 测试结果
    可以看到第一组数据分到2类别,第二组几个数据分别分到第2、2、1、3类别中。
    在这里插入图片描述

完整代码——分类问题

import numpy as np
from sklearn.neighbors import KNeighborsClassifier
data = np.loadtxt('datingTestSet2.txt')
x = data[:,:-1]
y = data[:,-1]
neigh = KNeighborsClassifier(n_neighbors=10,p=2)
neigh.fit(x,y) # 训练模型print(neigh.predict([[15004,0.08800,0.671355]]))predict_data = [[9744,11.440364,0.760461],[16191,0.100000,0.605619],[42377,6.519522,1.058602],[27353,11.475155,1.528626]]
print(neigh.predict(predict_data))

回归问题

  • 使用数据
    • 波士顿房价数据
  • 导入模块
import numpy as np
from sklearn.neighbors import KNeighborsRegressor
# 回归问题使用KNeighborsRegressor方法
  • 导入数据
data = np.loadtxt('boston.txt')
# 使用numpy中的loadtxt方法读取txt文件,读取后内容为数组
  • 提取数据
x = data[:,:-1]
# 逗号前后分别代表行和列,可以看出data[:,:-1]取从头到尾的行和从头到倒数第二个的列,且最后一个不取。
y = data[:,-1]
# 取从头到尾的行和最后一列。
  • KNN模型——KNeighborsRegressor
  • API

    class sklearn.neighbors.KNeighborsRegressor(n_neighbors=5, *, weights=‘uniform’, algorithm=‘auto’, leaf_size=30, p=2, metric=‘minkowski’, metric_params=None, n_jobs=None)

    • n_neighbors : k值,邻居的个数,默认为5。【关键参数】
    • weights : 权重项,默认uniform方法。
      Uniform:所有最近邻样本的权重都一样。【一般使用这一个】
      Distance:权重和距离呈反比,距离越近的样本具有更高的权重。【确认样本分布情况,混乱使用这种形式】
      Callable:用户自定义权重。
    • algorithm :用于计算最近邻的算法。
      ball_tree:球树实现
      kd_tree:KD树实现, 是一种对n维空间中的实例点进行存储以便对其进行快速搜索的二叉树结构。
      brute:暴力实现
      auto:自动选择,权衡上述三种算法。【一般按自动即可】
    • leaf_size :空值KD树或者球树的参数,停止建子树的叶子节点的阈值。
    • p : 距离的计算方式。P=1为曼哈顿距离,p=2为欧式距离。
    • metric : 用于树的距离度量
      1.曼哈顿距离2.欧式距离3.切比雪夫距离4.闵可夫斯基距离5.带权重闵可夫斯基距离
      6 .标准化欧式距离7.马氏距离
    • metric_params :用于比较复杂的距离的度量附加参数。
neigh = KNeighborsRegressor(n_neighbors=5,p=2)
# k = 5,使用欧式距离公式计算。
neigh2 = KNeighborsRegressor(n_neighbors=7,p=2)
# k = 7,使用欧式距离公式计算。
  • 训练模型
neigh.fit(x,y)
# 使用KNN模型中的fit方法进行训练。
neigh2.fit(x,y)
  • 测试模型
print(neigh.predict([[2.82838,0.00,18.120,0,0.5320,5.7620,40.32,4.0983,24,666.0,20.21,392.93,10.42]]))
print(neigh2.predict([[2.82838,0.00,18.120,0,0.5320,5.7620,40.32,4.0983,24,666.0,20.21,392.93,10.42]]))
  • 测试结果
    从结果可以看到根据不同的k值,会产生不同的回归值。
    在这里插入图片描述

完整代码 ——回归问题

import numpy as np
from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressordata = np.loadtxt('boston.txt')
x = data[:,:-1]
y = data[:,-1]
neigh = KNeighborsRegressor(n_neighbors=5,p=2)
neigh.fit(x,y)
print(neigh.predict([[2.82838,0.00,18.120,0,0.5320,5.7620,40.32,4.0983,24,666.0,20.21,392.93,10.42]]))
neigh2 = KNeighborsRegressor(n_neighbors=7,p=2)
neigh2.fit(x,y)
print(neigh2.predict([[2.82838,0.00,18.120,0,0.5320,5.7620,40.32,4.0983,24,666.0,20.21,392.93,10.42]]))

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

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

相关文章

如何在 Ubuntu 22.04 上安装和使用 Composer

简介 如果你是一名 PHP 开发者,想要简化你的项目依赖管理,那么 Composer 是一个必不可少的工具。Composer 可以简化包管理,并允许你轻松地将外部库集成到你的项目中。 本教程将向你展示如何在 Ubuntu 22.04 操作系统上安装 Composer&#x…

139.《python中的正则详解》

文章目录 什么是正则正则表达式语法正则demo1.匹配模式2.finditer3.正则分组4.非捕获组5.分组的引用6. 正则替换7.正则切割7.正则「或」7.枚举取反 面试题 前言: 拉开差距的不是上班的8小时,而是下班后的16小时,同志们,加油,卷起!!! 什么是正则 1.正则表达式是一种高级文本处理…

大语言模型(LLM)中大数据的压缩存储及其重要性

在大型语言模型(LLM)中,KV Cache(键值缓存)的压缩方法及其重要性。 为什么要压缩KV Cache? 计算效率:在生成文本的过程中,每个生成的token都需要与之前所有的token的键值&#xff…

『大模型笔记』评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释

评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释 文章目录 一. ELO Rating大模型的elo得分如何理解1. Elo评分的基本原理2. 示例说明3. 大模型中的Elo得分总结3个模型之间如何比较计算,给出示例进行解释1. 基本原理扩展到三方2. 示例计算第一场: A A…

高效使用AI完成编程项目任务的指南:从需求分析到功能实现

随着人工智能工具的普及,即便是零编程基础或基础薄弱的用户,也可以借助AI完成许多技术任务。然而,要高效地使用AI完成编程任务,关键在于如何清晰表达需求,并逐步引导AI实现目标。 在本文中,我们将通过开发…

【视觉惯性SLAM:四、相机成像模型】

相机成像模型介绍 相机成像模型是计算机视觉和图像处理中的核心内容,它描述了真实三维世界如何通过相机映射到二维图像平面。相机成像模型通常包括针孔相机的基本成像原理、数学模型,以及在实际应用中如何处理相机的各种畸变现象。 一、针孔相机成像原…

【Compose multiplatform教程18】多平台资源的设置和配置

要正确配置项目以使用多平台资源,请执行以下操作: 添加库依赖项。 为每种资源创建必要的目录。 为限定资源创建其他目录(例如,深色 UI 主题或本地化字符串的不同图像)。 依赖项和目录设置 要访问多平台项目中的资源…

RabbitMQ工作模式(详解 工作模式:简单队列、工作队列、公平分发以及消息应答和消息持久化)

文章目录 十.RabbitMQ10.1 简单队列实现10.2 Work 模式(工作队列)10.3 公平分发10.4 RabbitMQ 消息应答与消息持久化消息应答概念配置 消息持久化概念配置 10.5 订阅模式广播模式路由模式主题模式(通配符模式) 10.6 消息确认机制1…

Excel for Finance 07 `FV PV` 函数

Excel 的 FV 函数用于计算一笔投资在未来的价值,基于固定的利率和定期付款。这是一个金融函数,常用来分析储蓄计划、贷款、或投资的增长。 语法: FV(rate, nper, pmt, [pv], [type])参数说明: rate(必需)&…

React(二)——注册页/登录页/Reducer/

文章目录 项目地址一、使用Yarn安装所有环境二、文件结构以及路由配置三、登录和注册3.1 注册页面3.1.1 静态页面3.1.2 表单提交useSate3.2 登录页面3.3 admin 的登录页面四、关于auth登录和注册的Reducer4.1 authReducer创建4.2 根rootReducer的创建4.3 创建和配置Redux的stor…

每天五分钟深度学习框架pytorch:越来越深的卷积神经网络模型VGG

本文重点 前面我们使用pytorch搭建了卷积神经网络LeNet-5,AlexNet,本文我们学习卷积神经网络VGG,VGG相比于前面的两个神经网络而言比较深,我们知道网络模型越深那么就难以训练,但是VGG效果比较好。 Vgg使用了更小的滤波器,同时使用了更深的网络结构,AlexNet只有8层网络结…

小程序配置文件 —— 12 全局配置 - pages配置

全局配置 - pages配置 在根目录下的 app.json 文件中有一个 pages 字段,这里我们介绍一下 pages 字段的具体用法; pages 字段:用来指定小程序由哪些页面组成,用来让小程序知道由哪些页面组成以及页面定义在哪个目录,…

从0到100:基于Java的大学选修课选课小程序开发笔记(上)

背景 为学生提供便捷的课程选择方式,并帮助学校进行课程管理和资源调配;主要功能包括:课程展示,自主选课,取消选课,后台录入课程,统计每门课程报名情况,导出数据,用户管…

Dify服务器部署教程

Dify的github地址: https://github.com/langgenius/dify 服务器要求:2c4g 1、克隆仓库 可以通过命令或者下载zip解压后上传服务器都行 git clone https://github.com/langgenius/dify.git 2、docker启动 cd dify/dockercp .env.example .envdocker compose up -d…

Mac 12.1安装tiger-vnc问题-routines:CRYPTO_internal:bad key length

背景:因为某些原因需要从本地mac连接远程linxu桌面查看一些内容,必须使用桌面查看,所以ssh无法满足,所以决定安装vnc客户端。 问题: 在mac上通过 brew install tiger-vnc命令安装, 但是报错如下: > D…

大模型WebUI:Gradio全解系列9——Additional Features:附加功能(上)

大模型WebUI:Gradio全解系列9——Additional Features:附加功能(上) 前言本篇摘要9. Additional Features:附加功能9.1 队列9.1.1 使用方法9.1.2 配置队列演示 9.2 输入输出流9.2.1 输出流1. 生成器yield2. 流媒体 9.2…

Java - 日志体系_Apache Commons Logging(JCL)日志接口库_桥接Logback 及 源码分析

文章目录 PreApache CommonsApache Commons ProperLogging (Apache Commons Logging ) JCL 集成logbackPOM依赖配置文件 logback.xml使用 源码分析jcl-over-slf4j 的工作原理1. LogFactory 的实现2. SLF4JLogFactory 和 Log 的实例化过程3. SLF4JLog 和 …

文档大师:打造一站式 Word 报告解决方案1

前言 在政府、医院、银行、财务以及销售等领域,常常需要创建各种报告文件来展开工作汇报,譬如季度销售报告、年度总结报告、体检报告和保险合同等。在没有报表工具支持之前,这类报告主要通过 Word 制作,费时费力且难以维护&#…

阿尔萨斯(JVisualVM)JVM监控工具

文章目录 前言阿尔萨斯(JVisualVM)JVM监控工具1. 阿尔萨斯的功能2. JVisualVM启动3. 使用 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff…

<数据集>芝麻作物和杂草识别数据集<目标检测>

数据集下载链接 <数据集>芝麻作物和杂草识别数据集<目标检测>https://download.csdn.net/download/qq_53332949/90181548数据集格式:VOCYOLO格式 图片数量:1300张 标注数量(xml文件个数):130…