zoukankan      html  css  js  c++  java
  • 李航-统计学习方法-笔记-3:K近邻法(knn)

    概述

    k近邻法是一种基本分类与回归方法,本书只讨论用于分类;

    原理:k近邻法假设给定一个训练数据集,其中实例的类别已定,分类时对于新的实例,根据其k个最近邻的训练实例的类别,通过多数表决的方法进行预测。

    三要素:k值的选择,距离度量,分类决策规则

    三元素选择

    1.k值

    k值减小意味着整体模型变复杂,容易发生过拟合;过大模型过于简单,可能忽略训练实例中大量有用信息。

    选择:一般选取一个比较小的数值,通常采用交叉验证法来选取最优的k值。

    2.距离度量 详情看链接:https://blog.csdn.net/pxhdky/article/details/85067808

    Lp距离(闵可夫斯基距离);

    p=2为欧氏距离;

    p=1为曼哈顿距离;

    p=无穷,切比雪夫距离,是各个坐标距离的最大值

    3.分类决策规则

    knn中往往采用多数表决;等价于经验风险最小化。

    knn的实现:kd树

    实现knn时,主要考虑的问题是如何对训练数据进行快速的k近邻搜索,这点在特征空间维度大及训练数据容量大时尤其必要。

    kd树是一种对k维空间的实例点进行存储以便对其进行快速检索的树形数据结构。kd树是二叉树。KD树是基于欧式距离度量的。

    构造kd树

    李航内容链接:https://blog.csdn.net/u010002184/article/details/86654411

    • 随着树的深度轮流选择轴当作分区面。(例如:在三维空间中根节点是 x 轴垂直分区面,其子节点皆为 y 轴垂直分区面,其孙节点皆为 z 轴垂直分区面,其曾孙节点则皆为 x 轴垂直分区面,依此类推。)
    • 点由垂直分区面之轴座标的中位数区分并放入子树

    这个方法产生一个平衡的k-d树。每个叶节点的高度都十分接近。

    搜索kd树

    参考链接:https://blog.csdn.net/Losteng/article/details/50893739(简明易懂)

    从root节点开始,DFS搜索直到叶子节点,同时在stack中顺序存储已经访问的节点。
    如果搜索到叶子节点,当前的叶子节点被设为最近邻节点。
    然后通过stack回溯:
    如果当前点的距离比最近邻点距离近,更新最近邻节点.
    然后检查以最近距离为半径的圆是否和父节点的超平面相交.
    如果相交,则必须到父节点的另外一侧,用同样的DFS搜索法,开始检查最近邻节点。
    如果不相交,则继续往上回溯,而父节点的另一侧子节点都被淘汰,不再考虑的范围中.
    当搜索回到root节点时,搜索完成,得到最近邻节点。


  • 相关阅读:
    awk学习
    Redis快速入门
    Redis源码研究—基础知识
    稳定模式在RESTful架构中的应用
    解析Google集群资源管理系统Omega
    在Ubuntu 14.04 64bit上安装百度云Linux客户端BCloud
    在Ubuntu 14.04 64bit上安装Markdown和绘图软件Haroopad
    在Ubuntu 14.04 64bit上安装网易云音乐Linux版本(最新官方版)
    各数据库连接maven配置
    maven POM.xml 标签详解
  • 原文地址:https://www.cnblogs.com/ditingz/p/11766134.html
Copyright © 2011-2022 走看看