码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 机器学习-最近邻算法KNN原理及实现-附python代码


    1.最近邻

    Nearest Neighbors官方网址:
    https://scikit-learn.org/stable/modules/neighbors.html
    GitHub文档地址:https://github.com/gao7025/iris_knn

    2.工作原理:

    KNN是通过测量不同特征值之间的距离进行分类。它的思路是:K个最近的邻居,每个样本都可以用它最接近的K个邻居来代表,如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特征, KNN算法的结果很大程度取决于K的选择,其中K通常是不大于20的整数。距离有很多种计算方法,一般使用欧氏距离或曼哈顿距离即可。

    换句话说,KNN就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类,当K取值较大时,抗噪能力强,但K取值较小时,对噪声点的影响特别敏感。

    主要步骤:

    1. 计算测试数据与各个训练数据之间的距离;
    2. 按照距离的递增关系进行排序;
    3. 选取距离最小的K个点;
    4. 确定前K个点所在类别的出现频率;
    5. 返回前K个点中出现频率最高的类别作为测试数据的预测分类。
    • 优点:
      (1)简单方便,易于理解,无需训练,直接计算距离
      (2)适用于多分类问题
    • 缺点:
      (1)当样本数据不平衡时,分类的效果不佳
      (2)计算量较大,每一点都要计算K个最近的邻居的距离
    3.代码示例
    # -*- coding: utf-8 -*-
    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    from sklearn import neighbors
    from sklearn import metrics
    
    iris = datasets.load_iris()
    iris_features = iris.data[:, :2]
    iris_target = iris.target
    train_x, test_x, train_y, test_y = train_test_split(iris_features, iris_target, test_size=0.3, random_state=123)
    clf = neighbors.KNeighborsClassifier(20)
    clf.fit(train_x, train_y)
    pred = clf.predict(test_x)
    print('准确率:{:.1%}'.format(metrics.accuracy_score(test_y, pred)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    # 预测分类散点图
    t = np.column_stack((test_x,pred))
    plt.scatter(t[t[:, 2] == 0][:, 0], t[t[:, 2] == 0][:, 1], color = 'hotpink')
    plt.scatter(t[t[:, 2] == 1][:, 0], t[t[:, 2] == 1][:, 1], color = '#88c999')
    plt.scatter(t[t[:, 2] == 2][:, 0], t[t[:, 2] == 2][:, 1], color = '#6495ED')
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    分类如图:
    在这里插入图片描述

  • 相关阅读:
    ARouter原理解析之路由跳转
    【LeetCode Cookbook(C++ 描述)】一刷二叉树之递归遍历(DFS)(下)
    【正点原子FPGA连载】 第二章 实验平台简介 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
    LeetCode-2609. 最长平衡子字符串-双指针
    谨慎使用多线程中的 fork !!!!
    Dijkstra求最短路
    《十堂课学习 Flink》第九章:Flink Stream 的实战案例一:CPU 平均使用率监控告警案例
    LoRaWAN 网络(网关和终端设备)的模拟实现--附源码
    十六、模型构建器(ModelBuilder)快速提取城市建成区——理论介绍
    虚拟机JVM
  • 原文地址:https://blog.csdn.net/weixin_41233157/article/details/108347567
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号