zoukankan      html  css  js  c++  java
  • K近邻算法小结

    什么是K近邻?

    K近邻一种非参数学习的算法,可以用在分类问题上,也可以用在回归问题上。

    • 什么是非参数学习?
      一般而言,机器学习算法都有相应的参数要学习,比如线性回归模型中的权重参数和偏置参数,SVM的C和gamma参数,而这些参数的学习又依赖一定的学习策略。相比较而言,k近邻算法可以说是最简单,也是最容易理解的一种机器学习算法了。
    • K近邻算法思想?
      具体而言,在一个待测试样本周围找K个最近的点,然后根据这k个点进行决策,如果是分类问题,决策结果就是K个点中出现最多的类别;如果是回归问题,结果值为K个点目标值的均值;
    • 那么K值怎么选?
      K值的选择会对k近邻算法的结果产生重大的影响。
      具体怎么解释呢?以特殊情况入手来说,如果k值最小,等于1,这就意味着说,每次在对输入实例进行预测时,只考虑与其最近的实例,预测结果与最近的这个实例点密切相关,如果这个点恰巧为噪声点,就会出现误判,同时这样也会导致模型的过拟合,复杂度增加;如果K取值变得很大,等于N(训练实例总数),最后,无论距离度量方式是怎样的,最后的结果都是训练实例中出现最多的类,模型变得异常简单,预测时只要总是输出最多的类就可以了。
      总体而言,如果k值太小,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差会减小,缺点是“学习”的估计误差会增大,预测结果会对近邻的实例点非常敏感,如果近邻的实例点恰巧是噪声就会出错。换句话说,k值的减小意味着整体模型变复杂,容易发生过拟合;
      如果k值太大,就相当于用较大的邻域中的训练实例进行预测,优点可以减小学习的估计误差,缺点是学习的近似误差增大,与输入实例较远的训练实例也会对预测起作用,使预测发生错误,k值的增大意味着整体模型变得简单。如果k=N,那么无论输入实例是什么,都将简单的预测它属于在训练实例中最多的类,模型过于简单,完全忽略训练实例中的大量有用信息。
    • “最近”如何确定?
      距离度量方式,一般通过计算欧几里得距离进行比较,当然也有别的选择,如:曼哈顿距离,cos值等等;
    • 最终结果怎么确定?(分类决策规则)
      一般都是采用投票法,在选择的k个近邻点的标签值中,选择出现频率最高的作为输入实例的预测值。
      总体而言,在数据集一定的情况下, K近邻算法的表现如何主要取决于上面提到的三个要素:K值的选择,距离度量的方式和分类决策规则。

    算法描述

    对未知类别属性的数据集中的每个点依次执行以下操作:

    1. 计算已知类别数据集中的点与当前点之间的距离;
    2. 按照距离递增次序排序;
    3. 选取与当前点距离最近的k个点;
    4. 确定前k个点所在类别的出现频率;
    5. 返回前k个点出现频率最高的类别作为当前点的预测分类。

    优点

    算法简单 ,模型容易理解,没有学习训练过程,通常情况下不需要做很大调整就有着不错的表现;因此通常用作一个问题的baseline(最差、最基本的解决方案)

    局限性

    • 当实例特征过多,或者实例中大部分为稀疏特征时,模型表现并不如意;
    • 当数据集过大时,分类过程变得十分缓慢;
      因此实际过程中,只能用来处理一些小数据集,同时数据特征不多的情况,并不常用!
  • 相关阅读:
    Windows环境下多线程编程原理与应用读书笔记(7)————事件及其应用
    Windows环境下多线程编程原理与应用读书笔记(6)————临界段及其应用
    Windows环境下多线程编程原理与应用读书笔记(5)————互斥及其应用
    [bzoj1910] [Ctsc2002] Award 颁奖典礼
    [bzoj4411] [Usaco2016 Feb]Load balancing
    [bzoj2654] tree
    [bzoj4410] [Usaco2016 Feb]Fence in
    [bzoj3143] [Hnoi2013]游走
    [bzoj1826] [JSOI2010]缓存交换
    [bzoj1483] [HNOI2009]梦幻布丁
  • 原文地址:https://www.cnblogs.com/ysugyl/p/8728089.html
Copyright © 2011-2022 走看看