CH3_K近邻(KNN)算法及其Spark实现

本文深入解析了KNN(k-近邻)算法的基本原理、特点及应用,详细介绍了KNN模型的实现步骤,包括距离度量、K值选择和分类决策规则。并通过KD-Tree优化搜索效率,提供了Spark环境下KNN模型的实现代码,最后展示了算法测试过程。

KNN简介

KNN(k-Nearest Neighbors)又称作k-近邻。k-nn就是把未标记分类的案列归为与它们最相似的带有分类标记的案例所在的类。

KNN的特点

优点 缺点
简单且有效 不产生模型
训练阶段很快 分类过程比较慢
对数据分布无要求 模型解释性较差
适合稀疏时间和多分类问题 名义变量和缺失数据需要额外处理

KNN模型

K近邻模型有三个基本要素:距离度量、K值的选择、分类决策规则

实现步骤
  1. 计算距离:计算待测案例与训练样本之间的距离 。
  2. 选择一个合适的k:确定用于KNN算法的邻居数量,一般用交叉验证或仅凭经验选择一个合适的k值,待测案例与训练样本之间距离最小的k个样本组成一个案例池。
  3. 类别判定:根据案例池的数据采用投票法或者加权投票法等方法来决定待测案例所属的类别。
KD-Tree

kd-tree是一种分割k维数据空间的数据结构。主要应用于多维空间数据的搜索,经常使用在SIFT、KNN等多维数据搜索的场景中,以KNN(K近邻)为例,使用线性搜索的方式效率低下,k-d树本质是对多维空间的划分,其每个节点都为k维点的二叉树kd-tree,因此可以大大提高搜索效率。详细的构造方法和kd树的最近邻搜索方法可以参考李航老师的《统计学习方法》。

1.定义Kd树类及其方法
package CH3_KNearestNeibor

/**
  * Created by WZZC on 2019/11/29
  **/
/**
  *
  * @param label 分类指标
  *  @param value 节点数据
  *  @param dim   当前切分维度
  *  @param left  左子节点
  *  @param right 右子节点
  */
case class TreeNode(label: String,
               
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值