KNN(K最邻近分类算法)

news/2024/11/24 20:00:41/

K最近邻(KNN,K-NearestNeighbor)分类算法,是比较经典的分类算法,是将数据集合中每一个记录进行分类的方法,属于懒惰性学习算 法,只有当需要分类的向量到达时才开始构造泛化模型。是数据挖掘分类技术中最简单的方法之一。

算法中的每个样本都可以用它最接近的K个邻近值来代表。KNN算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。

基本原理

在样本集中找出与 待分类向量 tVec 最相似的 k 个向量,然后统计这 k 个向量中 出现次数最多的类别,把 tVec 归属为此类。KNN算法主要涉及样本集、相似度的衡量、k 大小3个因素。

  • 样本集也被称为训练集,是带有类别属性的向量集合;
  • 两个向量的相似度一般通过计算它们的欧氏距离或余弦 度来衡量;
  • k 的大小直接影响KNN算法的时空效率,如果 k 取值太小则容易受噪声的影响,k 取值过大,则近 邻中可能又包含过多其他类的数据点,因此一般情况 下, k 的取值一般不大于样本集的平方根。

KNN算法流程

步骤1 准备并预处理数据,即把样本数据待分类数据采用合适的数据结构存储起来。

步骤2 设定参数 k ,从样本集随机抽取 k 个向量用来初始化大小为 k 的优先级队列,即分别计算 tVec 到这 k 个向量的欧氏距离(dis),然后把样本向量及其 dis存入优先级队列。

欧氏距离的计算公式为:(其中 xs、 xt 分别代表 d 维的样本向量和待分类向量, i 表示第 i 维的分量。 )

步骤3 遍历样本集中每个向量到 tVec 的 dis ,并将 dis 与优先级队列中的最大距离 (disMax) 比较大小, 若 dis<disMax ,则 disMax 及对应的向量出队,当前被 遍历到的向量及其 dis插入到优先级队列;否则,忽略当 前向量,继续在样本集中遍历下一个向量。

步骤4 遍历完毕得到与 tVec 距离最近的 k 个样本 向量集合(topK),统计出 k 个近邻中包含向量个数最多的类别,并把 tVec 归属到此类。

另一个博主实现的KNN例子:https://blog.csdn.net/saltriver/article/details/52502253

参考论文《基于Storm的流数据KNN分类算法的研究与实现》

论文中还涉及基于Storm的流数据KNN分类算法(S-KNN),算法拓扑图如下:

SDIpt和TDIpt分别代表样本集和待分类数据的数据源;

Partition负责对样本集的数据划分;

SKNNBolt是 负责计算 tVec 的pTopK的具体Bolt;

WRKNN由多个 Bolt组成,这里的每个Bolt称为WRKNNBolt,负责汇总 tVec 的pTopK成wTopK;

RetBolt是负责对 tVec 归类的 Bolt。

具体流程见原论文。


http://www.ppmy.cn/news/231426.html

相关文章

学习TensorFlow,TensorBoard可视化网络结构和参数

在学习深度网络框架的过程中&#xff0c;我们发现一个问题&#xff0c;就是如何输出各层网络参数&#xff0c;用于更好地理解&#xff0c;调试和优化网络&#xff1f;针对这个问题&#xff0c;TensorFlow开发了一个特别有用的可视化工具包&#xff1a;TensorBoard&#xff0c;既…

TensorFlow系列:TensorBoard可视化网络结构和参数

转自&#xff1a;https://blog.csdn.net/helei001/article/details/51842531 在学习深度网络框架的过程中&#xff0c;我们发现一个问题&#xff0c;就是如何输出各层网络参数&#xff0c;用于更好地理解&#xff0c;调试和优化网络&#xff1f;针对这个问题&#xff0c;Tensor…

深度学习基础:卷积与转置卷积、计算量与参数量、argparse库、信息熵(KL散度及交叉熵)、hook机制、top_k和AvgrageMeter函数(持续更新)

深度学习模型基础知识汇总&#xff08;持续更新&#xff09; 文章目录 一、卷积和转置卷积1、基本概念2、输出尺寸的计算公式3、nn.Conv2d、nn.ConvTranspose2d的参数k,s,p在图形上的含义&#xff0c;卷积运算过程 二、模型计算量(FLOPs)和参数量(Params)三、python的argparse…

HyperOpt参数优化

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a; https://blog.csdn.net/u012735708/article/details/84820101 当我们创建好模型后&#xff0c;还要调整各个模型的参数&a…

机器学习之K近邻法(KNN)

目录 一、基本概念&#xff1a; 二、距离的计算方式&#xff1a; 三、k的选取: 四、特征归一化&#xff1a; 五、交叉验证&#xff1a; 一、基本概念&#xff1a; k近邻算法是一种基本分类和回归方法。这里只讨论分类问题的k近邻法。 k近邻算法&#xff0c;即是给定一个…

python位置参数错误_python – 函数缺少2个必需的位置参数:’x’和’y’

我正在尝试编写一个绘制Spirograph的Python龟程序,我不断收到此错误: Traceback (most recent call last): File "C:\Users\matt\Downloads\spirograph.py", line 36, in main() File "C:\Users\matt\Downloads\spirograph.py", line 16, in main spirog…

Hyperopt 参数优化

翻译自https://districtdatalabs.silvrback.com/parameter-tuning-with-hyperopt Parameter Tuning with Hyperopt –Kris Wright 概述 Hyperopt可以帮助快速进行机器学习模型参数调试。通常情况下有两种类型的参数调试方法&#xff0c;网格搜索&#xff08;grid search&…

python颜色参数_Python中matplotlib的颜色及线条参数控制示例

用Python画图的时候选色选点都可以直接参考这里的内容,matplotlib中有哪些命名颜色可供用于绘图? 在matplotlib文档中找到一个列表,声明这些是唯一的名称: b: blue g: green r: red c: cyan m: magenta y: yellow k: black w: white 然而,我发现这些颜色也可以使…