KNN算法在Spark RNN flow中的应用


KNN算法原理

一、KNN分类算法

KNN是一种基本分类, 回归方法.
简单而言, 分类过程为:
给定一个训练数据集, 对于新的输入实例, 在训练数据集中找到与该实例最邻近的K个实例, 即这K 个实例的多数属于某个类, 该实例分类到这个类中.

如下图, 若K=3, 绿色圆点最邻近3个点为2红1蓝, 属于红色
若K=5, 绿色圆点最邻近4个点为2红3蓝, 属于蓝色
在这里插入图片描述

二、三个问题

1.K值如何选取

选取k条距离最短的样本点,这里的k是根据具体情况而设定的,即根据实际情况选取参与投票的样本点数;
K过小: 整体模型复杂, 易过拟合, 容易学习到噪声 e.g. K=1
K=N: 无论输入什么, 都将简单预测为实例中最多的类, 相当于没有训练
一般选取一个较小值, 采取交叉验证法来选取最优的K值
图1: K=1受到黑色圆形噪声影响, 判定为黑色圆形; 图2: K=3, 判定为蓝色; 图3: K=N, 相当于无训练过程, 简单等于统计数量最多的种类; 图4: 正确的K值选取范围

2.距离如何度量

读取测试数据, 训练数据, 计算测试数据与训练数据之间的距离, 通常使用欧氏距离.
在这里插入图片描述

特征归一化

例: 一个人身高(cm)与脚码(尺码)大小来作为特征值,类别为男性或者女性。我们现在如果有5个训练样本,分布如下:A
[(179,42),男] B [(178,43),男] C [(165,36)女] D [(177,42),男] E
[(160,35),女] 测试样本 F[(167,43)], 预测性别.

第一维身高特征是第二维脚码特征的4倍左右,那么在进行距离度量的时候,我们就会偏向于第一维特征。这样造成俩个特征并不是等价重要的,最终可能会导致距离计算错误,从而导致预测错误。

K=3时: 最近的前三个分别是C,D,E三个样本,那么由C,E为女性,D为男性,女性多于男性得到我们要预测的结果为女性。
在这里插入图片描述

实际上脚码为43的女性可能性更低

最后按照少数服从多数的原则进行分类,即这k个样本点属于哪个类型的数量最多,则将该未知分类的样本点分类为这个数量最多的类。

如果有多个特征呢? 则需要特征归一化.
在这里插入图片描述

4. KNN优缺点

优点:
(1)理论成熟,思想简单,既可以用来做分类也可以用来做回归;
(2)可用于非线性分类;
(3)训练时间复杂 度低,为O(n^{2});
(4) 和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感
缺点:
(1)计算量大,尤其是特征数非常多的时候;
(2)样本不平衡的时候,对稀有类别的预测准 确率低;
(3)kd树,球树之类的模型建立需要大量的内存;
(4)使用懒散学习方法,基本上不学习,导致预测 时速度比起逻辑回归之类的算法慢;
(5)KNN模型可解释性不强。

三、RDD Flow

sc.textFile().map():
textFile()将文件内容全部读出, 一行为一条记录
RDD中两种类型操作: transformation, action
transformation如map方法, 根据旧数据集产生新数据集
broadcast: 广播变量
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值