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

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

被折叠的 条评论
为什么被折叠?



