【机器学习9】KNN

本文详细介绍了KNN算法的原理、特点和K值选择的重要性,并探讨了数据处理的两个关键步骤:KDTree和数据归一化。通过Java代码展示了KNN算法的实现过程,包括训练集和测试集的划分,以及输出样例。强调了数据归一化在算法中的作用和具体实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. KNN算法原理

- "英文:"
		K-Nearest Neighbor

- "思想:"
		对于任意n维输入向量,分别对应于特征空间中的一个点,输出为该特征向量所对应的类别标签或预测值

- "原理:"
		1. 它的工作原理是利用训练数据对特征向量空间进行划分,并将划分结果作为最终算法模型
		2. 输入没有标签的数据后,将这个没有标签的数据的每个特征与样本集中的数据对应的特征进行比较,
		然后提取样本中特征最相近的数据(最近邻)的分类标签

2. KNN算法特点

		1. 最基础、最简单
		2. 我们只选择样本数据集中前k个最相似的数据,这就是KNN算法中K的由来(k<=203. 优点:精度高、对异常值不敏感
		4. 缺点:计算复杂度高、空间复杂度高
		5. 也被称为惰性学习 lazy learning. 类似于开卷考试, 在已有数据中去找答案
		6. 一般需要对数据归一化

3. K值

- "K值选择:"
		1. k值过小,误差较小,但容易导致KNN算法的过拟合
		2. k值过大,鲁棒性,模型容易发生欠拟合
		3. 一般k值选得比较小,我们会在较小范围内选取k值,同时把测试集上准确率最高的那个确定为最终的算法超参数k

- "交叉验证:"
		1. 将样本数据按照一定比例,拆分出训练用的数据和验证用的数据(比如64拆分出部分训练数据和验证数据)
		2. 从选取一个较小的K值开始不断增加K的值
		3. 然后计算验证集合的方差,最终找到一个比较合适的K值。

4. 数据处理

4.1 KDTree

- "目的:"
		为了快速查找到k个近邻,我们可以考虑使用特殊的数据结构存储训练数据,用来减少搜索次数。
		其中,KDTree就是最著名的一种。

4.2 数据归一化

  • 原因
1. 在距离计算中我们需要计算预测样本与训练数据集中多个特征的距离,但不同特征之间数据差异较大,会造成预测错误。
2. 可以类比:欧氏距离与标准化欧式距离
3. 目的:使特征等价
4. 数据归一化,使不同特征属于同一数量级,之间的差异性减弱,有利于KNN的分类
  • 数据归一化

一般的数据归一化是将数据映射在 [0,1] 中,公式如下:

X = X − X m i n X m a x − X m i n X=\frac{X-X_{min}}{X_{max}-X_{min}} X=XmaxXminXXmin

5. 算法流程

		1. 计算待预测样本与训练数据集中样本特征之间的欧式距离。 
		2. 按照距离递增的顺序排序。
		3. 选取距离最近的K个样本以及所属类别的次数。
		4. 返回前k个点所出现频率最高的类别作为预测分类结果。

6. Java代码

6.1 训练集,测试集

  • 训练集iris.arff
@RELATION iris

@ATTRIBUTE sepallength	REAL
@ATTRIBUTE sepalwidth 	REAL
@ATTRIBUTE petallength 	REAL
@ATTRIBUTE petalwidth	REAL
@ATTRIBUTE class 	{
   Iris-setosa,Iris-versicolor,Iris-virginica}

@DATA
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.4,3.7,1.5,0.2,Iris-setosa
4.8,3.4,1.6,0.2,Iris-setosa
4.8,3.0,1.4,0.1,Iris-setosa
4.3,3.0,1.1,0.1,Iris-setosa
5.8,4.0,1.2,0.2,Iris-setosa
5.7,4.4,1.5,0.4,Iris-setosa
5.4,3.9,1.3,0.4,Iris-setosa
5.1,3.5,1.4,0.3,Iris-setosa
5.7,3.8,1.7,0.3,Iris-setosa
5.1,3.8,1.5,0.3,Iris-setosa
5.4,3.4,1.7,0.2,Iris-setosa
5.1,3.7,1.5,0.4,Iris-setosa
4.6,3.6,1.0,0.2,Iris-setosa
5.1,3.3,1.7,0.5,Iris-setosa
4.8,3.4,1.9,0.2,Iris-setosa
5.0,3.0,1.6,0.2,Iris-setosa
5.0,3.4,1.6,0.4,Iris-setosa
5.2,3.5,1.5,0.2,Iris-setosa
5.2,3.4,1.4,0.2,Iris-setosa
4.7,3.2,1.6,0.2,Iris-setosa
4.8,3.1,1.6,0.2,Iris-setosa
5.4,3.4,1.5,0.4,Iris-setosa
5.2,4.1,1.5,0.1,Iris-setosa
5.5,4.2,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.0,3.2,1.2,0.2,Iris-setosa
5.5,3.5,1.3,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
4.4,3.0,1.3,0.2,Iris-setosa
5.1,3.4,1.5,0.2,Iris-setosa
5.0,3.5,1.3,0.3,Iris-setosa
4.5,2.3,1.3,0.3,Iris-setosa
4.4,3.2,1.3,0.2,Iris-setosa
5.0,3.5,1.6,0.6,Iris-setosa
5.1,3.8,1.9,0.4,Iris-setosa
4.8,3.0,1.4,0.3,Iris-setosa
5.1,3.8,1.6,0.2,Iris-setosa
4.6,3.2,1.4,0.2,Iris-setosa
5.3,3.7,1.5,0.2,Iris-setosa
5.0,3.3,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolor
6.4,3.2,4.5,1.5,Iris-versicolor
6.9,3.1,4.9,1.5,Iris-versicolor
5.5,2.3,4.0,1.3,Iris-versicolor
6.5,2.8,4.6,1.5,Iris-versicolor
5.7,2.8,4.5,1.3,Iris-versicolor
6.3,3.3,4.7,1.6,Iris-versicolor
4.9,2.4,3.3,1.0,Iris-versicolor
6.6,2.9,4.6,1.3,Iris-versicolor
5.2,2.7,3.9,1.4,Iris-versicolor
5.0,2.0,3.5,1.0,Iris-versicolor
5.9,3.0,4.2,1.5,Iris-versicolor
6.0,2.2,4.0,1.0,Iris-versicolor
6.1,2.9,4.7,1.4,Iris-versicolor
5.6,2.9,3.6,1.3,Iris-versicolor
6.7,3.1,4.4,1.4,Iris-versicolor
5.6,3.0,4.5,1.5,Iris-versicolor
5.8,2.7,4.1,1.0,Iris-versicolor
6.2,2.2
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜满月

鼓励,鼓励,更加努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值