②【万字详解·附代码】机器学习分类算法之K近邻(KNN)

简介: 【万字详解·附代码】机器学习分类算法之K近邻(KNN)

余弦距离(Cosine Distance)

余弦距离又称余弦夹角,在几何中可用来衡量两个向量方向的差异。机器学习中,借用这一概念来衡量样本向量之间的差异。


(1)二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:


image.png



(2)两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦为:


image.png


余弦距离的意义


余弦夹角取值范围为[-1,1]。余弦越大表示两个向量的夹角越小,余弦越小表示两向量的夹角越大。当两个向量的方向重合时余弦取最大值1,当两个向量的方向完全相反余弦取最小值-1。


image.png


相关距离(Correlation distance)

相关系数:是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关):


image.png


相关距离:


image.png


汉明距离(Hamming Distance)

定义:两个等长字符串s1与s2的汉明距离为:将其中一个变为另外一个所需要作的最小字符替换次数。

汉明重量:是字符串相对于同样长度的零字符串的汉明距离,也就是说,它是字符串中非零的元素个数:对于二进制字符串来说,就是 1 的个数,所以 11101 的汉明重量是 4。因此,如果向量空间中的元素a和b之间的汉明距离等于它们汉明重量的差a-b。

应用场景:汉明重量分析在包括信息论、编码理论、密码学等领域都有应用。比如在信息编码过程中,为了增强容错性,应使得编码间的最小汉明距离尽可能大。但是,如果要比较两个不同长度的字符串,不仅要进行替换,而且要进行插入与删除的运算,在这种场合下,通常使用更加复杂的编辑距离等算法。


image.png


关于距离的总结

物理几何空间距离(欧氏距离为代表)

优点:

容易理解,计算简单,而且在样本各个维度数据完整好的情况下具有较理想的预判效果。


缺陷:

1)将各个分量的量纲(scale),也就是“单位”相同的看待了;

2)未考虑各个分量的分布(期望,方差等)可能是不同的。


替代:马氏距离(Mahalanobis Distance),一种基于样本分布的距离。物理上就是在规范化的主成分空间中的欧氏距离。所谓规范化的主成分空间就是已经利用主成分分析对一些数据进行了主成分分解,并且对所有主成分分解轴做了归一化,形成新坐标轴。这些新坐标轴组成的空间就是规范化的主成分空间。


欧氏距离和余弦距离的差异

举例:左下图两个等边三角形,已知边长坐标,求两者之间距离。


可以发现,欧式距离跟余弦距离判断结果恰好相反。


image.png


欧氏距离和余弦距离的差异

原因:


欧氏距离和余弦相似度各自的计算方式和衡量角度不相同,欧氏距离关注的是两点之间的绝对距离,而夹角余弦相似度注重的是两个向量在方向上的差异,而非距离。


如下二维坐标图中,有A、C两个样本,欧氏距离关注的是AC两点的直线段距离,与OA、OC线段长度密切相关;而夹角余弦则是关注OA线段与OC线段重合需扫过的角度(θ)大小,与OA、OC线段长度无关。因此,夹角余弦相似度是整体方向性上的判断,而欧氏距离则是各分量特征的绝对差值判断。


image.png


基于概率统计的距离

如需考虑分量相关性、个体相对于总体的比重等相关因素,更多则是采用基于概率统计的分布距离,较常用的有:马氏距离、巴氏距离、杰卡德相似系数、皮尔逊相关系数等。这些距离的计算多涉及统计学及概率论知识,因而相对较复杂。


KNN算法原理

为了判定未知样本的类别,以全部训练样本作为代表点,计算未知样本与所有训练样本的距离,并以最近邻者的类别作为决策未知样本类别的唯一依据。


KNN分类器是对NN算法的一种改进


算法步骤:

1)计算待分类点与已知类别的点之间的距离

2)按照距离递增次序排序

3)选取与待分类点距离最小的k个点

4)确定前k个点所在类别的出现次数

5)返回前k个点出现次数最高的类别作为待分类点的预测分类


举例说明


如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那类


image.png


如果K=5,蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。

image.png



KNN算法需要确定K值、距离度量和分类决策规则


K值过小时,只有少量的训练样本对预测起作用,容易发生过拟合,或者受含噪声训练数据的干扰导致错误


K值过大,过多的训练样本对预测起作用,当不同类别样本数量不均衡时,结果偏向数量占优的样本


距离度量在KNN中,通过计算对象间距离来作为各个对象之间的相似性指标,距离一般使用欧氏距离或曼哈顿距离:


image.png


优点:


1、容易理解,实现简单


2、只需保存训练样本和标记,无需估计参数和训练


3、不易受最小错误概率的影响。理论证明,最近邻的渐进错误率最坏不超过两倍的贝叶斯错误率,最好则接近或达到贝叶斯错误率。


缺点:


1、K值选择不固定,且对分类结果有较大影响。


2、预测结果容易受噪声数据影响。


3、样本不均衡时,新样本的预测会偏向数量占优的一方


4、具有较高的计算复杂度和内存消耗量



相关文章
|
11天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
40 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
1月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
1月前
|
机器学习/深度学习 算法 Python
探索机器学习中的决策树算法:从理论到实践
【10月更文挑战第5天】本文旨在通过浅显易懂的语言,带领读者了解并实现一个基础的决策树模型。我们将从决策树的基本概念出发,逐步深入其构建过程,包括特征选择、树的生成与剪枝等关键技术点,并以一个简单的例子演示如何用Python代码实现一个决策树分类器。文章不仅注重理论阐述,更侧重于实际操作,以期帮助初学者快速入门并在真实数据上应用这一算法。
|
21天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
1月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
1月前
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
1月前
|
机器学习/深度学习 算法 API
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
|
1月前
|
机器学习/深度学习 算法 数据处理
EM算法对人脸数据降维(机器学习作业06)
本文介绍了使用EM算法对人脸数据进行降维的机器学习作业。首先通过加载ORL人脸数据库,然后分别应用SVD_PCA、MLE_PCA及EM_PCA三种方法实现数据降维,并输出降维后的数据形状。此作业展示了不同PCA变种在人脸数据处理中的应用效果。
35 0
|
1月前
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)

热门文章

最新文章

下一篇
无影云桌面