KNN算法

来源:互联网 发布:java中的转义字符 编辑:程序博客网 时间:2024/06/11 02:49

                   KNN算法

一 三大要素

 KNN算法三大要素:K值的选择,距离向量,以及分类规则。

  KNN属于懒惰学习算法,不需要训练过程。既可以分类,也可以进行回归分析。

  (1)K值的选择会对算法的结果产生重大影响。K值较小意味着只有与输入实例较近的训练实例才会对预测结果起作用,但容易发生过拟合;如果 K 值较大,优点是可以减少学习的估计误差,但缺点是学习的近似误差增大,这时与输入实例较远的训练实例也会对预测起作用,是预测发生错误。在实际应用中,K 值一般选择一个较小的数值,通常采用交叉验证的方法来选择最有的 K。随着训练实例数目趋向于无穷和 K=1 时,误差率不会超过贝叶斯误差率的2倍,如果K也趋向于无穷,则误差率趋向于贝叶斯误差率。

  (2)该算法中的分类决策规则往往是多数表决,即由输入实例的 K 个最临近的训练实例中的多数类决定输入实例的类别,对应于经验风险最小化。

  (3)距离度量一般采用 Lp 距离,当p=2时,即为欧氏距离,在度量之前,应该将每个属性的值规范化,这样有助于防止具有较大初始值域的属性比具有较小初始值域的属性的权重过大。


 二 优化方法

  实现K近邻,主要考虑的问题是如何对训练数据进行快速K近邻搜索。这点在特征空间维数大以及训练数据量大的时候,尤其重要。一种解决方式就是KD树。

  KD树是一种对K维空间中的实例点进行存储以便对其进行快速检索的树形数据结构,KD树是一颗二叉树,表示对K维空间的一个划分。时间复杂度为O(logn)。

  KNN是基于准确率的,不需要训练过程。


三 优缺点

 

  这里我们不用KNN来实现分类,我们使用KNN最原始的算法思路,即为每个内容寻找K个与其最相似的内容,并推荐给用户。


五  基本缺点以及改进

  (1)计算复杂度高

  (2)分类准确度

     a)相似度衡量

     b)类别判断策略

     c)K值的选择


  (1)计算复杂度高解决方案:

     a)最简单直接的方法就是:进行特征上的处理,包括特征选择与降维,减少计算量。常用的特征处理方法比如说计算所有特征的信息增益,特征聚类,过滤式/包裹式特征选择,PCA,KPCA降维。

     b)优化训练集。裁剪:思想认为训练集中靠近各个类别中心的大部分样本对分类决策用处不大,去掉这部分样本将大大减小开销并压缩数据量。生成代表:通过聚类,将聚类产生的中心点作为新的样本。

     c)利用KD树进行K近邻搜索,大大减少计算量。

  (2)分类准确度

      a)相似度衡量:传统的KNN是将所有特征进行等权重处理,此时我们可以根据重要性对特征分配权重,提高分类准确性。

     b)类别判断策略:传统的方式是进行投票法。如果此时样本数据类别不均衡等,此时应该将每个类别根据其密度分配以权重。

     c)K值的选择。目前并没有很好的方法,交叉验证,选择一个较好的。K值较小,特别容易受噪声点的影响。K值太大,将其他类别的点加进来了。




 


0 0