码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • K-近邻算法


    6. K-近邻算法

    文章目录

      • 6. K-近邻算法
        • 6.1 简介
        • 6.2 距离公式
        • 6.3 电影类型分析
        • 6.4 KNN算法流程总结
        • 6.5 K近邻算法api初步使用
          • 6.5.1 机器学习流程
          • 6.5.2 Scikit-learn 工具
          • 6.5.3 sklearn包含的内容
          • 6.5.4 K 近邻算法API
        • 6.6 距离度量
          • 6.6.1 距离公式的基本性质
          • 6.6.2 常见距离公式
          • 6.6.3 其他距离公式
          • 6.6.4 “连续属性”和“离散属性”的距离计算
        • 6.7 K值的选择
          • 6.7.1 K值过小
          • 6.7.2 K值过大
          • 6.7.3 近似误差和估计误差
        • 6.8 kd树
          • 6.8.1 基本原理
          • 6.8.2 最近邻域搜索
        • 6.9 案例1 :鸢尾花种类预测
          • 6.9.1 数据集介绍
          • 6.9.2 流程实现
        • 6.10 特征工程 - 特征预处理
          • 6.10.1 特征预处理
        • 6.11 KNN 算法总结
          • 6.11.1 优点
          • 6.11.2 缺点
        • 6.12 交叉验证、网格搜索
          • 6.12.1 交叉验证
          • 6.12.2 网格搜索
          • 6.12.3 api
        • 6.13 数据分割
          • 6.13.1 留出法
          • 6.13.2 交叉验证法
          • 6.13.3 自助法

    6.1 简介

    KNN - K近邻算法

    • 根据朋友所在的位置,判断自己的类别

    如果一个样本在特征空间中的k个最相似(即特征空间中最临近)的样本中的大多数属于某一个类别

    • 则该样本也属于这个类别

    6.2 距离公式

    两个样本的距离 – 欧式距离

    二维平面

    • 在这里插入图片描述

    三维空间点

    • 在这里插入图片描述

    n维空间点

    • 在这里插入图片描述

    6.3 电影类型分析

    在这里插入图片描述

    6.4 KNN算法流程总结

    1. 计算已知类别数据集中的点与当前点之间的距离

    2. 按距离递增次序排序

    3. 选取与当前点距离最小的k个点

    4. 统计前k个点所在的类别出现的概率

    5. 返回前k个点出现频率最高的类别作为当前点的预测分类

    6.5 K近邻算法api初步使用

    6.5.1 机器学习流程

    • 获取数据集
    • 数据基本处理
    • 特征工程
    • 机器学习
    • 模型评估

    6.5.2 Scikit-learn 工具

    • Python语言的机器学习工具
    • 包含许多知名的机器学习算法的实现
    • 文档完善、容易上手、api丰富

    6.5.3 sklearn包含的内容

    • 分类、聚类、回归
    • 特征工程
    • 模型选择、调优

    6.5.4 K 近邻算法API

    • sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)

      • 查询默认使用的邻居数
    • 在这里插入图片描述

    6.6 距离度量

    6.6.1 距离公式的基本性质

    • 非负性
    • 同一性
    • 对称性
    • 直递性

    6.6.2 常见距离公式

    • 欧式距离

    • 曼哈顿距离

      • 在这里插入图片描述
    • 切比雪夫距离

      • 在这里插入图片描述
    • 闵可夫斯基距离

      • 在这里插入图片描述

    6.6.3 其他距离公式

    • 标准化欧氏距离

      • 在这里插入图片描述
    • 余弦距离

      • 在这里插入图片描述
    • 汉明距离

      • 在这里插入图片描述
    • 杰卡德距离

      • 在这里插入图片描述
    • 马氏距离

      • 在这里插入图片描述

    6.6.4 “连续属性”和“离散属性”的距离计算

    • 若属性值之间存在序关系,转化为连续值

      • 高、中等、矮 → {1,0.5,0}
    • 不存在序关系,转化为向量形式

      • 男、女 → {{1,0},{0,1}}

    6.7 K值的选择

    6.7.1 K值过小

    • 容易受到异常点的影响
    • K值的减小,意味着整体模型变得复杂,容易发发生过拟合

    6.7.2 K值过大

    • 受到样本均衡的问题
    • K值的增大,意味着整体的模型变得简单,使预测发生错误

    6.7.3 近似误差和估计误差

    • 近似误差

      • 对现有训练集的训练误差,关注训练集
      • 如果近似误差过小可能会出现过拟合的现象,对现有的训练集能有很好的预测,但是对未知的测试样本将会出现较大偏差的预测
      • 模型本身不是最接近最佳模型
    • 估计误差

      • 对测试集的测试误差,关注测试集
      • 估计误差小说明对未知数据的预测能力好
      • 模型本身最接近最佳模型

    6.8 kd树

    为了避免每次都重新计算一遍距离,算法把距离信息保存在一个树里,尽量避免重新计算

    在这里插入图片描述

    6.8.1 基本原理

    • 如果A和B距离很远,B和C距离很近,那么A和C的距离也很远

    6.8.2 最近邻域搜索

    6.9 案例1 :鸢尾花种类预测

    6.9.1 数据集介绍

    • 在这里插入图片描述

    • 获取小数据集

      • 在这里插入图片描述
    • 获取大数据集

      • 在这里插入图片描述
    • sklearn数据集返回值介绍

      • load和fetch返回的数据类型datasets.base.Bunch(字典格式)
      • data:特征数据数组
      • target:标签数组
      • DESCR:数据描述
      • feature_names:特征名
      • target_names:标签名
    • 利用seaborn查看数据分布

    • 数据集的划分

      • 训练集

      • 测试集

      • sklearn.model_selection.train_test_split()

        • x → 特征值
        • y → 目标值
        • test_size:测试集大小
        • random_state:随机数种子
        • 返回值:x_train,y_train,y_test

    6.9.2 流程实现

    • KNeighborsClassifier的使用

    6.10 特征工程 - 特征预处理

    6.10.1 特征预处理

    • 特征工程:通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程

    • 为什么要进行归一化/标准化

      • 特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响目标结果,使得一些算法无法学习到它的其他的特征
    • 归一化

      • 通过对原始数据进行变换把数据映射到(默认0到1)之间
      • 鲁棒性较差,只适合于传统精确小数据的场景
    • 标准化

      • 通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内
      • 在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景

    6.11 KNN 算法总结

    6.11.1 优点

    • 简单有效
    • 重新训练的代价性
    • 适合类域交叉样本
    • 适合大样本自动分类

    6.11.2 缺点

    • 惰性学习
    • 类别评分不是规格化
    • 输出可解释性不强
    • 对不均衡的样本不擅长
    • 计算量较大

    6.12 交叉验证、网格搜索

    6.12.1 交叉验证

    4折交叉验证

    • 将训练数据分为训练和验证集

    • 经过4组的测试,每次都更换不同的验证集,得到4组模型的结果,取平均值作为最终结果

    • 在这里插入图片描述

    • 目的:为了让被评估的模型更加准确可信

    6.12.2 网格搜索

    • 超参数

      • 手动指定的参数
    • 每组超参数都采用交叉验证来进行评估,最后选出最优参数组合建立模型

    • 网格搜索就是把这些超参数的值,通过字典的形式传递进去,然后进行选择最优值

    6.12.3 api

    • 在这里插入图片描述

    6.13 数据分割

    6.13.1 留出法

    • 将数据集分为训练集和测试集
    • 留一法

    6.13.2 交叉验证法

    6.13.3 自助法

  • 相关阅读:
    现货伦敦金体现的6个心态
    音视频 - 视频编码原理
    Vue 简易版无限加载组件实现原理
    算法&&&
    Kernel Memory 入门系列:快速开始
    HttpRunner 接口自动化测试框架实战,打造高效测试流程
    Nacos服务注册中心
    【产品人卫朋】华为IPD流程体系:集成产品开发框架
    【C++】构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用 )
    leetcode 简单
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126160354
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号