码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • KNN算法实现


    目录

    实验目标

    案例内容介绍

    实验步骤

    1、导入实验所需的sklearn包,导入numpy,进行矩阵计算

    2、提供简单的数据结构进行后续的KNN算法验证

    3、KNN算法的内容

    4、调用KNN算法

    5、训练数据

    6、预测结果,可以查看分类结果

    实验目标

    1. 了解KNN算法的基本思想;
    2. 能够使用SKlearn实现KNN算法。

    案例内容介绍

    KNN是通过测量不同特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

    实验步骤

    1、导入实验所需的sklearn包,导入numpy,进行矩阵计算

    1. # 从sklearn 导入KNeighborsClassifier方法
    2. from sklearn.neighbors import KNeighborsClassifier
    3. import numpy as np

    2、提供简单的数据结构进行后续的KNN算法验证

    1. X = np.array([[1, 1], [1, 1.5], [2, 2.5], [2.5, 3], [1.5, 1], [3, 2.5]])
    2. y = ['A', 'A', 'B', 'B', 'A', 'B']

    3、KNN算法的内容

    根据sklearn提供的包,创建knn算法对象

    n_neighbors=5

    int 型参数 knn算法中指定以最近的几个最近邻样本具有投票权,默认参数为5

    algrithm='auto'

    str参数 即内部采用什么算法实现。有以下几种选择参数:

    'ball_tree':球树、'kd_tree':kd树、'brute':暴力搜索、'auto':自动根据数据的类型和结构选择合适的算法。

    默认情况下是‘auto’。暴力搜索就不用说了大家都知道。具体前两种树型 数据结构哪种好视情况而定。KD树是对依次对K维坐标轴,以中值切分构造 的树,每一个节点是一个超矩形,在维数小于20时效率最高。

    ball tree 是为了克服KD树高维失效而发明的,其构造过程是以质心C和半径r分割样本空间,每一个节点是一个超球体。一般低维数据用 kd_tree速度快,用ball_tree相对较慢。超过20维之后的高维数据,用kd_tree效果反而不佳,而ball_tree效果要好,具体构造过程及优劣势的理论大家有兴趣可以去具体学习。

    4、调用KNN算法

    model = KNeighborsClassifier(n_neighbors=4, algorithm='ball_tree')

    5、训练数据

    1. """
    2. fit 就是训练模型
    3. fit()
    4. 训练函数,它是最主要的函数。接收参数只有1个,就是训练数据集,
    5. 每一行是一个样本,每一列是一个属性。它返回对象本身,即只是修
    6. 改对象内部属性,因此直接调用就可以了,后面用该对象的预测函数
    7. 取预测自然及用到了这个训练的结果。其实该函数并不是
    8. KNeighborsClassifier这个类的方法,
    9. 而是它的父类SupervisedIntegerMixin继承下来的方法。
    10. """
    11. model.fit(X, y)

    6、预测结果,可以查看分类结果

    1. # 预测
    2. print(model.predict([[1.75, 1.75]])) # 输出分类结果
    3. print(model.predict_proba([[1.75, 1.75]])) # 返回预测属于某标签的概率
    4. print(model.score(X, y)) # 输出模型训练结果

  • 相关阅读:
    Centos7安装宝塔面板8.0.3并实现公网远程登录宝塔面板【内网穿透】
    springboot微服务前端传参数至后端的几个方式,@RequestBody如何传入多个参数
    TiDB ——TiKV
    PowerCLI 通过vCenter 批量导出所有虚拟机到本地磁盘
    git clone - error: invalid path
    谷歌向全体员工发放万元红包:外包员工和实习生也不例外
    跟羽夏学 Ghidra ——导航
    inpaint-anything:分割任何东西遇到图像修复
    vscode ssh远程连接失败问题及解决
    指针-字符串替换
  • 原文地址:https://blog.csdn.net/m0_62975468/article/details/127984860
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号