首页 > 其他分享 >K近邻模型

K近邻模型

时间:2024-03-11 19:12:21浏览次数:10  
标签:近邻 样本 距离 cell 查找 相交 equation 模型

k近邻模型

基本思想

\(k\)近邻算法还是很直观的,准确的来说它不是一种学习算法,而是一种统计方法,不具备学习过程,一次性就可以给出结果。
其本质思想是将特征空间划分成一个个的单元(\(cell\)),其中每个\(cell\)的区域由距离该点比其他点更近的所有点定义,所有的\(cell\)组成了整特征空间。

如上图所示:
考虑样本\(x_1\)构成的\(cell\),记作\(cell_{x_1}\)

  • 对于\(x_2\),其距离\(x_3\)比\(x_1\)近,因此,\(x_2\)无法成为\(cell_{x_1}\)中的一员
  • 对于\(x_3\),其距离\(x_2\)比\(x_1\)近,因此,\(x_3\)无法成为\(cell_{x_1}\)中的一员
  • 对于\(x_4\),其距离\(x_2, x_3, x_5\)均比\(x_1\)近,因此,\(x_4\)无法成为\(cell_{x_1}\)的一员
  • 对于\(x_5\),其距离\(x_2, x_3, x_4\)均比\(x_1\)近,因此,\(x_5\)无法成为\(cell_{x_1}\)的一员
    因此,\(x_1\)组成的\(cell\)为空,即\(cell_{x_1}=\emptyset\)

再考虑样本\(x_2\)构成的\(cell\),记作\(cell_{x_2}\)

  • 对于\(x_1\),由于没有任何一样比\(x_2\)距离\(x_1\)更近,因此\(x_1\)成为其一员
  • 对于\(x_3\),由于没有任何一样比\(x_3\)距离\(x_1\)更近,因此\(x_3\)成为其一员
  • 对于\(x_4\),其距离\(x_3, x_5\)均比\(x_2\)近,因此,\(x_4\)无法成为其一员
  • 对于\(x_5\),其距离\(x_3, x_4\)均比\(x_2\)近,因此,\(x_5\)无法成为其一员
    因此,\(cell_{x_2}=\{x_1, x_3 \}\)

同理我们可以得到\(cell_{x_3} = \{x_2\}\),\(cell_{x_4} = \{x_5\}\),\(cell_{x_5} = \{x_4\}\)
这样一来,有所有\(cell\)定义的区域就组成了整个空间,就可以通过每个\(cell\)构成的区域中的样本来对新样本进行预测。

上面只是理想中的方式,是一种辅助理解的办法,存在诸多问题,比如区域不好定义,上面的示例中我们只是规定了一个\(cell\)所必须包含的元素,并没有定义由这些元素构成的区域。
在实际中,我们往往直接使用与每个样本\(x\)最近的\(k\)个样本\(N_k(x)\)的类别对\(x\)的类别进行预测,比如下面的所属表决规则。
\begin{equation}
y = \mathop{\arg\max}\limits_{c_j} \sum_{x_i \in N_k{x}} I(y_i=c_j), i=1,2,\cdots,N;j=1,2,\cdots,K
\end{equation}
其中\(N\)为全体样本,\(K\)为所有类别数,而距离度量往往使用L1范数,当然其他距离也行,下面是三种常见的距离。
曼哈顿距离(L1范数):
\begin{equation}
L_1(x_i,x_j) = \sum_{l = 1}^{n}\vert x_i^{(l)} - x_j^{(l)}\vert
\end{equation}

\[\begin{equation} L_2(x_i,x_j) = (\sum_{l = 1}^{n}\vert x_i^{(l)} - x_j^{(l)}\vert ^2)^{\frac{1}{2}} \end{equation} \]

\[\begin{equation} L_\infty(x_i,x_j) = \mathop{\max}\limits_l\vert x_i^{(l)} - x_j^{(l)}\vert \end{equation} \]

三种距离在二维空间中的等距图如下:

对于\(L_1\)(黑色),由于夹角\(\theta=\frac{\pi}{4}\),所以黑线上的点到原点的\(L1\)始终相等,由于橙色为半径为1的圆,因此橙色上的点到原点的\(L_2\)均为半径,红色为边长为2的正方形,其上的点到原点的\(L_\infty\)均为边长的一半。(图中指示错误\(L_3\)应改为\(L_\infty\))

kd树

从上面的介绍可知,若想找去每个样本的\(k\)个近邻\(N_{x_k}\)则需要计算\(N\)次后再排序选出,那么所有样本计算的时间复杂度至少是\(N^2\)级别,显然代价无法承受,因此需要一种能够有效减少冗余计算的方式。而\(kd\)树就是其中一种,它包括建树和查找两个过程。

平衡树的建立

\(kd\)树的建立过程比较简单,主要遵从如下思想:
假设样本为\(d\)维,首先取所有样本在\(d=1\)维度上的值并排序,找到中位数(若为偶数则计算二者均值),取出中位数对应的样本(若不存在则在其相邻处随机取一个)建立根结点,并对左右两部分样本进行递归进行上述操作\(d = (d + 1) \% d\)

示例:
有以下二维空间中的数据集,要求建立一个\(kd\)树

\[T = \{(2,3), (5,4), (9,6), (4,7), (8,1), (7,2)\} \]

首先让所有样本在\(d = 1\)维上进行从小到大的排序得到:

\[T_1 = \{(2,3), (4,7), (5,4), (7,2), (8,1), (9,6)\} \]

得到中位数\(=\frac{5 + 7}{2}=6\),但是样本中不含这个样本,因此需要在两侧附件随机取1个构建根结点,机器学习课本中选择7,这里我们以5作为示例。
因此得到\(root_{T_{1}}=(5,4)\), \(T_{11}=\{(2,3), (4,7)\}\), \(T_{12}=\{(7,2), (8,1), (9,6)\}\)

继续构建下一层\(d=2\)维上样本
对于\(T_{11}\)在\(d=2\)上进行排序得到\(T_{211}=T_{11}\),计算中位数\(=\frac{3+7}{2}=5\),由于\(T_{211}\)中不存在第二维为5的样本,因此随机选1,这里选\(root_{T_{211}}=(2,3)\),因此\(T_{2112}=\{(4,7)\}\)成为它的右子树(同时也是右根,右叶结点),并且无左子树。

对于\(T_{12}\)在\(d=2\)上进行排序得到\(T_{212}=\{(8,1),(7,2),(9,6)\}\),计算中位数\(=2\),因此得到\(root_{T_{212}}=(7,2)\), 左子树(左根,左叶)\(T_{2121}=\{(8,1)\}\),右子树(右根,右叶)\(T_{2122}=\{(9,6)\}\)。
至此,原始样本的对应的平衡\(kd\)树构建完毕。
下面是图例:

树的查找

树的查找包括正向和反向两个过程,正向和建树类似只需一一判断即可,反向也是必须的,因为正向过程不能保证所查找到的一定是其最近邻(需要参见\(kd\)树原始论文)。

  • 正向递归查找。当给出一个样本在查找与它的最近邻样本时(限定\(L_2\)距离)时,需要依次从根节点往下查找,和建树过程类似,比如在建立第一层时用的是\(d=1\)即第一维值的大小,那么查找时也应使用样本的第一维与其第一维进行比较,该过程递归进行直至找到叶子结点。
  • 反向回溯查找。在得到正向查找中与样本点\(x_i\)的近似最近邻点\(x_j\)时,以\(x_i\)为圆心,\(x_i\)到\(x_j\)的\(L_2\)距离为半径构建一个圆。回溯,依次各个区域是否与圆相交,若相交找到与其相交的最小区域对应的结点,
    示例:
    我们考虑比机器学习课本更复杂一些的情况,如下。

    首先我们容易根据正向查到找到样本点\(S\)所处的区域即B的右子树对应的区域,也是叶结点\(D\)的范围。构建以\(S\)为圆心,\(d_{SD}\)为半径的圆。然后检查\(F\)对应的区域是否与圆相交,显然不相交,于是F向上回溯至A的上半部分\(C\)对应的区域,显然与圆相交。于是检查C的左区域\(G\)对应的区域,无相交,检查\(C\)的右区域\(E\)是否相交,相交,更新半径为\(d_{SE}\),并构建新圆,如下。

继续检查\(E\)的上区域\(H\)是否相交,相交,但是距离太远不用更新,继续检查E的下区域\(I\)是否相交,明显相交,且半径可以更新为\(d_{IS}\),继续这样操作之后,还可以更新半径为\(d_{KS}\)(图没画好),最终的得到S的最近邻点\(K\)。

标签:近邻,样本,距离,cell,查找,相交,equation,模型
From: https://www.cnblogs.com/hywang1211/p/18064458

相关文章

  • ELMO模型—>解决向量一词多义
    2024.3.11ELMO模型—>解决向量一词多义elmo解决一词多义问题,与Word2Vec不同的是,可以融合上下文信息ElMO(专门做词向量,通过预训练)不只是训练一个Q矩阵,我们还可以把这个词的上下文信息融入到这个Q矩阵中上图中,左边的LSTM获取E2的上文信息,右边对应获取下文信息怎么处理一词多......
  • 破晓未来·迎接智能新时代:混合 AI 大模型开发者工作坊震撼预告
    随着科技的日新月异,人工智能正在以前所未有的速度渗透进各行各业,而大模型作为AI技术的前沿探索,正引领着新一轮的技术革新风暴。在此背景下,一场专为AI领域热衷者与开发者精心筹备的“混合AI大模型开发者工作坊·AI云边端协同最佳实践”即将拉开序幕!在深度学习和机器学习......
  • Djiango视图层和模型层
    Djiango使用教程目录Djiango使用教程一.视图层1.1HttpResponse,render,redirect1.2JsonResponse1.3form表单上传文件及后端保存1.4.request方法二.FBV和CBV2.1CBV语法格式2.2CBV实现原理三.模版层3.1模版语法传值3.2过滤器3.3转义3.4标签逻辑系列1)for循环2)if判......
  • ChatGLM-6B模型基于 P-Tuning v2 微调脚本参数解释
    1、地址:https://github.com/THUDM/ChatGLM-6B/blob/main/ptuning/README.md2、参数示例PRE_SEQ_LEN=128LR=2e-2CUDA_VISIBLE_DEVICES=0python3main.py\--do_train\--train_fileAdvertiseGen/train.json\--validation_fileAdvertiseGen/dev.json\......
  • 从16-bit 到 1.58-bit :大模型内存效率和准确性之间的最佳权衡
    通过量化可以减少大型语言模型的大小,但是量化是不准确的,因为它在过程中丢失了信息。通常较大的llm可以在精度损失很小的情况下量化到较低的精度,而较小的llm则很难精确量化。什么时候使用一个小的LLM比量化一个大的LLM更好?在本文中,我们将通过使用GPTQ对Mistral7B、Llama27b和L......
  • 学习Django【1】模型
    编辑models.py文件,改变模型。运行pythonmanage.pymakemigrations为模型的改变生成迁移文件。运行pythonmanage.pymigrate来应用数据库迁移。1、定义模型-也就是数据库结构设计和附加的其它元数据。大白话:数据库建表。2、使用命令pythonmanage.pym......
  • 常用数据分析模型与方法
    一、背景数据分析中,会有一些分析方法来处理不同的问题。简单总结一下。方法汇总:https://share.mindmanager.com/#publish/5v_9k6Z9J3gqPL9sQwAGGKL5DgNrclp4iq_q8C7L    方法链接: 二、RFM分析2.1 定义R(Recency): 客户距离最近的一次采购时间的间隔。F( Freq......
  • 并行化优化KD树算法:使用C#实现高效的最近邻搜索
    本文信息中文名:《并行化优化KD树算法:使用C#实现高效的最近邻搜索》英文名:"ParallelizedOptimizationofKD-TreeAlgorithm:ImplementingEfficientNearestNeighborSearchinC#"摘要本文介绍了如何使用并行计算技术优化KD树算法,并使用C#编程语言实现了高效的最近邻......
  • 3D目标检测技术有哪些好用的模型?
    常用的3D目标检测模型有:   VoxelNet:基于卷积神经网络的模型,可以进行立体感知和目标检测。   PointPillars:利用点云数据进行立体感知和目标检测的模型。   AVOD(AverageViewpointFeatureAggregationfor3DObjectDetection):基于多视角特征聚合的3D目标检测模......
  • 无线表格识别模型LORE转换库:ConvertLOREToONNX
    引言总有小伙伴问到阿里的无线表格识别模型是如何转换为ONNX格式的。这个说来有些惭愧,现有的ONNX模型是很久之前转换的了,转换环境已经丢失,且没有做任何笔记。今天下定决心再次尝试转换,庆幸的是转换成功了。于是有了转换笔记:ConvertLOREToONNX。这次吸取教训,环境文件采用Anacond......