第二章 KNN算法
- 一 KNN算法原理
- 二 KNN三要素
- 三 机器学习中标准化
- 四 KNN分类预测规则
- 五 KNN回归预测规则
- 六 KNN算法实现方式
- 七 KD Tree
- 7.1 构造KDtree
- 7.2 KD tree查找最近邻
- 八 KNN特点
一 KNN算法原理
K近邻 分类,回归 K=1 最近邻,多分类 多数表决规则等价于0-1损失函数下的经验风险最小化 KDTree是一种存储k维空间数据的树结构,KDTree是平衡二叉树 K近邻(K-nearst neighbors, KNN)是一种基本的机器学习算法,所谓k近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表;KNN算法既可以应用于分类应用中,也可以应用在回归应用中
KNN在做回归和分类的主要区别在于最后做预测的时候的决策方式不同。KNN在分类预测时,一般采用多数表决法;而在做回归预测时,一般采用平均值法
![3eDEkq.png](https://img-blog.csdnimg.cn/img_convert/da32a77e63baed165e1c41c130950961.png#pic_center)
- 从训练集合中获取K个离待预测样本距离最近的样本数据
- 根据获取得到的K个样本数据来预测当前待预测样本的目标属性值
二 KNN三要素
![3eDl4U.png](https://i-blog.csdnimg.cn/blog_migrate/75d2be2f0b3e9d74e9aa81014e8d8e70.png)
在KNN算法中,非常重要的主要是三个因素:
-
K值的选择:对于K值的选择,一般根据样本分布选择一个较小的值,然后通过交叉验证来选择一个比较合适的最终值
-
当选择比较小的K值的时候,表示使用较小领域中的样本进行预测,训练误差会减小,但是会导致模型变得复杂,容易过拟合;当选择较大的K值的时候,表示使用较大领域中的样本进行预测,训练误差会增大,同时会使模型变得简单,容易导致欠拟合
-
**距离的度量:**一般使用欧氏距离(欧几里得距离)
闵可夫斯基距离本身不是一种距离,而是一类距离的定义。对于n维空间中的两个点x(x1,x2,…xn和y(y1,y2,……yn),x和y之间的闵可夫斯基距离可以表示为:
d x y = ∑ k = 1 n ( x k − y k ) p p d_{xy}=\sqrt[p]{\sum_{k=1}^n(x_k-y_k)^p} dxy=pk=1∑n(xk−yk)p
当p=1时,被称为曼哈顿距离;当p=2时,被称为欧氏距离;当p=\infty时,被称为切比雪夫距离
![]()
- 决策规则:在分类模型中,主要使用多数表决法或者加权多数表决法;在回归模型中,主要使用平均值法或者加权平均值法
- 要使误分类率最小即经验风险最小,所以多数表决规则等价于经验风险最小化
三 机器学习中标准化
对数据进行归一化处理是机器学习模型的一个重要流程,能够提高模型的训练效率和预测准确率。
- 避免不同量纲对模型的影响:
不同的特征通常具有不同的量纲,例如身高和体重的量纲是不同的。如果不进行归一化,那么具有更大值域的特征会对模型的训练产生更大的影响,这可能导致模型无法正确地学习数据之间的关系。
- 提高优化算法的收敛速度
许多优化算法(例如梯度下降)都是基于迭代的,而归一化后的数据能够让优化算法更快地收敛,从而提高训练效率。(MLP需要对数据进行归一化)
- 提高模型的预测准确率
归一化后的数据能够避免模型的预测结果受到异常值或极端值的影响,从而提高模型的预测准确率。
四 KNN分类预测规则
![3eDQKs.png](https://i-blog.csdnimg.cn/blog_migrate/a8ed8d7a43f1a6ca55e023f8b7ad29d6.png)
在KNN分类应用中,一般采用多数表决法或者加权多数表决法:
- **多数表决法:**每个邻近样本的权重是一样的,也就是说最终预测的结果为出现类别最多的那个类,比如右图中蓝色正方形的最终类别为红色;
- **加权多数表决法:**每个邻近样本的权重是不一样的,一般情况下采用权重和距离成反比的方式来计算,也就是说最终预测结果是出现权重最大的那个类别;比如右图中,假设三个红色点到待预测样本点的距离均为2,两个黄色点到待预测样本点距离为1,那么蓝色圆圈的最终类别为黄色。
五 KNN回归预测规则
![3eDyaV.png](https://i-blog.csdnimg.cn/blog_migrate/27e21244598bd020f3841571ea086144.png)
在KNN回归应用中,一般采用平均值法或者加权平均值法:
- **平均值法:**每个邻近样本的权重是一样的,也就是说最终预测的结果为所有邻近样本的目标属性值的均值;比如右图中,蓝色圆圈的最终预测值为:2.6;
- **加权平均值法:**每个邻近样本的权重是不一样的,一般情况下采用权重和距离成反比的方式来计算,也就是说在计算均值的时候进行加权操作;比如右图中,假设上面三个点到待预测样本点的距离均为2,下面两个点到待预测样本点距离为1,那么蓝色圆圈的最终预测值为:2.43。(权重分别为: 1/7和2/7)
六 KNN算法实现方式
KNN算法的重点在于找出K个最邻近的点,主要方式有以下几种:
- 蛮力实现(brute):计算预测样本到所有训练集样本的距离,然后选择最小的k个距离即可得到K个最邻近点。缺点在于当特征数比较多、样本数比较多的时候,算法的执行效率比较低
- KD树(kd_tree):KD树算法中,首先是对训练数据进行建模,构建KD树,然后再根据建好的模型来获取邻近样本数据
- 除此之外,还有一些从KD_Tree修改后的求解最邻近点的算法,比如:Ball Tree、BBF Tree、MVP Tree等
七 KD Tree
KD 树(KD-tree)是一种用于高效查找最近邻的数据结构。它是一种二叉树,每个节点代表一个 k 维空间中的点,并且每个节点都有一个分割超平面,将空间划分为两个子空间
KD Tree是KNN算法中用于计算最近邻的快速、便捷构建方式。当样本数据量少的时候,我们可以使用brute这种暴力的方式进行求解最近邻,即计算到所有样本的距离。但是当样本量比较大的时候,直接计算所有样本的距离,工作量有点大,所以在这种情况下,我们可以使用kd tree来快速的计算。
7.1 构造KDtree
KD树采用从m个样本的n维特征中,分别计算n个特征取值的方差,用方差最大的第k维特征nk作为根节点。对于这个特征,选择取值的中位数nkv作为样本的划分点,对于小于该值的样本划分到左子树,对于大于等于该值的样本划分到右子树,对左右子树采用同样的方式找方差最大的特征作为根节点,递归即可产生KD树
![3eDg5G.png](https://i-blog.csdnimg.cn/blog_migrate/ab280287e12a1486db936e8edc894e61.png)
![3eDhCB.png](https://i-blog.csdnimg.cn/blog_migrate/439451cf1c94cb9d8298a60733d37c70.png)
![3eDGkt.png](https://i-blog.csdnimg.cn/blog_migrate/b682a3be060ad43d07e1b9d44e05a929.png)
![3eDxbb.png](https://i-blog.csdnimg.cn/blog_migrate/1e6cb85cb1c3d0ca103652e9835754f5.png)
7.2 KD tree查找最近邻
![3eD5Pe.png](https://img-blog.csdnimg.cn/img_convert/e5de20083b3fefeb8931394f650eaa04.png#pic_center%20=x20)
从树的根节点开始,沿着KD树向下递归,找到最接近目标点的叶子节点(最后一个节点)
回溯这条路径,对于每个节点执行以下步骤:
- 如果该节点比当前最近邻距离更近,则将该节点设置为最近邻节点
- 计算目标点与当前节点所在超矩形的距离,得到当前最近邻距离d_min
- 根据步骤1和步骤2,确定需要遍历的子树。如果当前节点为父节点的左子节点,并且当前节点到目标点的距离小于当前最近邻距离,则需要遍历右子树;如果当前节点为父节点的右子节点,并且当前节点到目标点的距离小于当前最近邻距离,则需要遍历左子树
- 递归地访问确定的子树,重复执行步骤2和步骤3,直到递归到叶子节点为止
八 KNN特点
KNN是一种非参的、惰性的算法模型
- 非参的意思并不是说这个算法不需要参数,而是意味着这个模型不会对数据做出任何的假设。也就是说 KNN 建立的模型结构是根据数据来决定的,这也比较符合现实的情况,毕竟在现实中的情况往往与理论上的假设是不相符的
- 惰性又是什么意思呢?想想看,同样是分类算法,逻辑回归需要先对数据进行大量训练(tranning)最后才会得到一个算法模型。而 KNN 算法却不需要,它没有明确的训练数据的过程,或者说这个过程很快
优点:
- 简单易用
- 精度高
- 对异常值不敏感
- 无数据输入假定
**缺点:**计算复杂度高、空间复杂度高
对内存要求较高,因为该算法存储了所有训练数据
预测阶段可能很慢
对不相关的功能和数据规模敏感