传统机器学习笔记2——KNN算法

目录

  • 前沿
  • 一.机器学习与分类问题
    • 2.1.数学抽象
  • 二.KNN算法思想
    • 2.1.核心思想
    • 2.2.KNN算法的步骤
    • 2.3.工作原理
    • 2.4.参数选择
    • 2.5.KNN算法实例
  • 3.KNN算法的缺点与改进
    • 3.1.KNN算法的核心要素
      • 3.1.1.KNN的距离计算
      • 3.1.2.核心要素:K的大小
      • 3.1.3.KNN的缺点改进

前沿

  KNN算法即我们常说的K邻近算法(K-nearest neighbors),从他的表面意思也可以看出这个算法应该是通过他周围的事务和数据来推断我们需要预测的事物或者数据。比如支付宝对我们进行芝麻信用评分中一个重要的指标就是你的好友的信用程度会关联到你。KNN既可以用于分类,也可以用于回归。

一.机器学习与分类问题

  前面我们在介绍机器学习概述的时候讲过分类问题,机器学习中的分类就是通过对已有的数据的学习来判断他没见过的数据属于哪一类别。主要有二分类,多分类和多标签分类。

2.1.数学抽象

  从算法的角度去解决分类问题,我们训练的数据会被映射成n维空间的样本点或者说是n维特征维度,我们对n维样本空间的点进行类别区分,某些点归属到某个类别。如下图是二维平面中的两类样本点,我们可以使用一条直线对两类样本点进行切分。那么如果是三类,四类呢,这个时候直线是不是就不能满足要求了,就要用到多分类了。
传统机器学习笔记2——KNN算法_第1张图片
常见的分类场景:

  • 垃圾邮件:二分类。
  • 图像识别:多分类,识别成猫,狗等。
  • 文章感情色彩分析:二分类,褒义还是贬义。

二.KNN算法思想

  在模式识别中,KNN算法是一种用于回归或分类的非参数统计方法,输入为包含特征空间中的K个最接近的训练样本。

2.1.核心思想

  在分类任务中,KNN的输出是一个分类族群。一个对象的分类结果是由他的邻居确定的,K个最近的邻居中最常见的分类结果决定了该对象的输出类别。在回归任务,输出的是该对象的属性值,该值是其K个最邻近的值的平均。通俗的理解KNN就是物以类聚,人以群分。KNN算法采用空间向量模型来分类,概念为相同类别的案例,彼此的相似度高。而可以借由计算与已知类别案例之相似度,来评估未知类别案例可能的分类。KNN 是一种基于实例的学习,或者是局部近似和将所有计算推迟到分类之后的惰性学习。 KNN算法是所有的机器学习算法中最简单的之一。

若K=1,则该对象的类别直接用最近的一个节点赋予

  KNN算法最早是由最邻近算法演变出来的,由于最邻近算法是以全部训练样本作为代表点计算未知样本与所有训练样本的距离,并以最近邻者的类别作为决策未知样本类别的唯一依据。因此最邻近算法对于噪声非常敏感。为了解决噪声敏感的问题,于是引入了KNN算法。

2.2.KNN算法的步骤

  1. 初始化距离为最大值
  2. 计算未知样本和每个训练样本的距离distance
  3. 得到目前k个最邻近样本中的最大距离max distance
  4. 如果distance
  5. 重复步骤2,3,4直到未知样本和所有训练样本的距离都计算完
  6. 统计k个邻近样本中每个类别出现的次数
  7. 选择频率最大的类别作为未知样本的类别

下图是个简易版本,有助于理解
传统机器学习笔记2——KNN算法_第2张图片

2.3.工作原理

  • 存在一个训练样本集合,每个样本都要标签
  • 输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最邻近的分类标签。
  • 一般情况下,只选择样本数据集前N个最相似的数据。一般k<20。最后,选择K个中出现次数最多的分类,作为新数据的分类。

2.4.参数选择

  • 一般情况下K值的选择取决于数据,在分类较大的时候K值能够减少噪声的影响,但是会使得类别之间的界限编的模糊。一个好的K值能够通过启发式技术获取。
  • 噪声和非相关性特征的存在,或特征尺度与它们的重要性不一致会使K近邻算法的准确性严重降低。对于选取和缩放特征来改善分类已经做了很多研究。一个普遍的做法是利用进化算法优化功能扩展,还有一种较普遍的方法是利用训练样本的互信息进行选择特征。
  • 在二元(两类)分类问题中,选取 为奇数有助于避免两个分类平票的情形。在此问题下,选取最佳经验 值的方法是自助法。

  注意: KNN 没有显示的训练过程,它是懒惰学习的代表,它在训练阶段只是把数据保存下来,训练时间开销为 ,等收到测试样本后进行处理。

2.5.KNN算法实例

  我们以一个简单的二分类,男生女生分类来理解下KNN算法。男生的主要特征是短头发,身高普遍高于女生。女生的主要特征是长头发,身高普遍低于男生。我们来根据这个特征绘制一组数据,其中头发特征我们也用数据来表示。
传统机器学习笔记2——KNN算法_第3张图片
  假设我们现在有一组数据(176,3),假设K等于3,我们来计算下排序前三的性别类型,计算可得为男,男,男。假设取K=4,所得的结果为男,男,男,女,那么结果依旧判定为男。

3.KNN算法的缺点与改进

  我们知道KNN算法是基于空间距离来对样本进行分类的,本质是基于特征空间的划分。主要有以下优缺点:
  优点:精度高,对异常值不敏感,无数据输入假定
  缺点:计算复杂度高,只考虑邻近不同类别的样本数量却忽略了距离,如下图,Y应该属于红色类的,但是被判定成紫色类别。
  适用范围:数值型和标称型
传统机器学习笔记2——KNN算法_第4张图片

3.1.KNN算法的核心要素

3.1.1.KNN的距离计算

   KNN算法依赖于空间中相近的点做类别判断,判断距离远近的度量标准非常重要。距离度量标准对于很多算法都很重要,比如后面我们要介绍的聚类算法。所以就会又引入一个问题,不同的距离计算方式也会带来不同的影响。我们下面来介绍一下 L p L_{p} Lp距离。 L p L_{p} Lp是一组距离的定义。
L p ( x i , x j ) = ( ∑ m = 1 n ∣ x i ( m ) − x j ( m ) ∣ p ) 1 p L_p\left(x_i, x_j\right)=\left(\sum_{m=1}^n\left|x_i^{(m)}-x_j^{(m)}\right|^p\right)^{\frac{1}{p}} Lp(xi,xj)=(m=1n xi(m)xj(m) p)p1
其中p取不同的值表示不同的距离计算方法

  • 当p=1的时候表示曼哈顿距离
    L 1 ( x i , x j ) = ∑ m = 1 n ∣ x i ( m ) − x j ( m ) ∣ L_1\left(x_i, x_j\right)=\sum_{m=1}^n\left|x_i^{(m)}-x_j^{(m)}\right| L1(xi,xj)=m=1n xi(m)xj(m)

  • 当p=2的时候表示欧式距离,也就是我们用的最多的距离计算方法
    L 2 ( x i , x j ) = ( ∑ m = 1 n ∣ x i ( m ) − x j ( m ) ∣ 2 ) 1 2 L_2\left(x_i, x_j\right)=\left(\sum_{m=1}^n\left|x_i^{(m)}-x_j^{(m)}\right|^2\right)^{\frac{1}{2}} L2(xi,xj)=(m=1n xi(m)xj(m) 2)21

  • 当p-> ∞ \infty 的时候,表示的是切比雪夫距离
    L ∞ ( x i , x j ) = max ⁡ ∣ x i ( m ) − x j ( m ) ∣ m ∈ { 1 , 2 , 3 , … , n } L_{\infty}\left(x_i, x_j\right)=\max \left|x_i^{(m)}-x_j^{(m)}\right| \quad m \in\{1,2,3, \ldots, n\} L(xi,xj)=max xi(m)xj(m) m{1,2,3,,n}

3.1.2.核心要素:K的大小

  对于 KNN 算法而言,K的大小取值也至关重要,如果选择较小的K值,意味着整体模型变得复杂(模型容易发生过拟合),模型学习的近似误差(approximation error)会减小,但估计误差(estimation error)会增大。如果选择较大的 K值,就意味着整体的模型变得简单,减少学习的估计误差,但缺点是学习的近似误差会增大。在实际的应用中,一般采用一个比较小的K值。并采用交叉验证的方法,选取一个最优的K值。

3.1.3.KNN的缺点改进

  我们上面讲了KNN算法的计算复杂度高,只考虑邻近不同类别的样本数量却忽略了距离。其实KNN还存在如下缺点:

  • 样本库容量依赖性较强对 KNN 算法在实际应用中的限制较大:有不少类别无法提供足够的训练样本,使得 KNN算法所需要的相对均匀的特征空间条件无法得到满足,使得识别的误差较大。
  • K值的确定: KNN 算法必须指定K值,K值选择不当则分类精度不能保证。

改进方法:

  1. 加快KNN算法的分类速度
  • 浓缩训练样本当训练样本集中样本数量较大时,为了减小计算开销,可以对训练样本集进行编辑处理,即从原始训练样本集中选择最优的参考子集进行K近邻寻找,从而减少训练样本的存储量和提高计算效率。
  • 加快K个最近邻的搜索速度这类方法是通过快速搜索算法,在较短时间内找到待分类样本的 K个最近邻。
  1. 加快对样本库的维护
  • 对训练样本库进行维护以满足 KNN 算法的需要,包括对训练样本库中的样本进行添加或删除,采用适当的办法来保证空间的大小,如符合某种条件的样本可以加入数据库中,同时可以对数据库库中已有符合某种条件的样本进行删除。从而保证训练样本库中的样本提供 KNN 算法所需要的相对均匀的特征空间。

最后推荐一篇写的比较好的博主写的关于KNN的博文和哔站一个博主的解释
博文:KNN算法和kd树详解(例子+图示),
哔哩哔哩:学生视频-KD树

你可能感兴趣的:(机器学习,机器学习,算法,人工智能)