K-近邻算法之鸢尾花实例 使用Spark实现KNN的Demo

本文深入讲解了K近邻算法(KNN)的概念与应用,详细介绍了KNN算法的定义、距离计算公式、流程总结及在鸢尾花种类预测中的具体实现过程。

1.1 K-近邻算法(KNN)概念

K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法

定义

如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

来源:KNN算法最早是由Cover和Hart提出的一种分类算法

距离公式
两个样本的距离可以通过如下公式计算,又叫欧式距离
在这里插入图片描述

1.3 KNN算法流程总结

1)计算已知类别数据集中的点与当前点之间的距离

2)按距离递增次序排序

3)选取与当前点距离最小的k个点

4)统计前k个点所在的类别出现的频率

5)返回前k个点出现频率最高的类别作为当前点的预测分类

自己的步骤:

1、未知点与所有样本点(已知分类的点)的距离
2、基于距离排序
3、取前K个点
4、基于label(分类的信息)做wordcount

2 小结

K-近邻算法简介【了解】
定义:就是通过你的"邻居"来判断你属于哪个类别
如何计算你到你的"邻居"的距离:一般时候,都是使用欧氏距离

案例:鸢尾花种类预测

Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。关于数据集的具体介绍:
在这里插入图片描述
TODO 优化点:arr.last arr.init
灵活使用数组的.last(取最后一个元素) 与 .init(取除了最后一个元素的所有元素)

package IrisKNN.teacher

import org.apache.spark.rdd.RDD
import org.apache.spark.{
   
   SparkConf, SparkContext}

/**
 * Created by Shi shuai RollerQing on 2019/12/30 16:23
 * 鸢尾花例子
 * KNN 算法
 */
object KNNDemo {
   
   
  def main(args: Array[String]): Unit = {
   
   
    val conf = new SparkConf().setAppName("KNNDemo").setMaster("local[*]")
    val sc = new SparkContext(conf)
    val K = 9
    //1.转换为样例类
    val lines = sc.textFile("C:\\Users\\HP\\IdeaProjects\\sparkCore\\data\\iris.dat")
      .map{
   
   line=>
        val fields = line.split(",")
        if (fields.length == 5) LabeledPoint(fields.last, fields.init.map(_.toDouble))
        else LabeledPoint("", fields.map(_.toDouble))//没有label的将label置为空 也换为LabeledPoint样例类
      }
    //2.分类 分为数据集(已知label的)和测试集(未知的)  将没有label的转换为数组即可 方便做外层循环
    val sampleRDD: RDD[LabeledPoint] = lines.filter(_.label != "")
    val testData: Array[Array[Double]] = lines.filter(_.label == "").map(_.point).collect()

    //小表在外面 相当于join 小表在右边
    testData.foreach(point => {
   
   
      sampleRDD.map(labeledpoint 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值