KNN算法

目录

一 KNN算法的介绍:

二 KNN算法的原理:

三 KNN算法实例:


一 KNN算法的介绍:

K最近邻算法简称KNN算法,是一种基本的分类和回归方法。

KNN算法又叫做K近邻算法,是众多机器学习算法里面最基础入门的算法。KNN算法是最简单的分类算法之一,同时,它也是最常用的分类算法之一。KNN算法是有监督学习中的分类算法,它看起来和Kmeans相似(Kmeans是无监督学习算法),但却是有本质区别的。

二 KNN算法的原理:

它主要基于以下思想:

它的原理就是如果一个样本在特征空间中的K个最相似(即距离最近)的样本中的大多数属于某个类别,则该样本也属于这个类别。KNN算法的核心思想是通过训练数据中与待预测样本最近的K个样本的标签来确定该样本的类别。

简单的说,就像是一个学生参加军训,站在了他的位置上。可能你在之前不知道他是哪个班级的,但如果他周围全都是一班的学生,那就可以判断这个学生也是一班的。这就是KNN算法的主要思想:"近朱者赤近墨者黑"。

1:K值的选取

K值的选取并没有固定的规律,但选择一个合适的K值于KNN算法的性能和准确度至关重要。

在这里可以用到以下几种方法:

经验法则:根据经验法则,通常选择一个奇数的K值,以避免分类结果出现平局的情况。常见的K值选择包括1、3、5、7等。

可视化方法:有时候可以通过绘制K值与模型性能之间的关系图来选择合适的K值。例如,可以绘制K值和模型在训练集和验证集上的误差曲线,观察曲线的变化趋势,选择误差较小的K值。

2:计算距离

①:欧几里得距离

公式:

介绍:欧氏距离是最常见的距离度量方法,它基于直角坐标系中两点之间的直线距离。对于二维空间中的两个点A(x1, y1)和B(x2, y2),欧氏距离可以表示为:d = \sqrt{((x2-x1)^2 + (y2-y1)^2)}

②:曼哈顿距离

公式:

介绍:曼哈顿距离又称为城市街区距离,它是通过计算两点之间在每个维度上的差的绝对值的和来定义的。对于二维空间中的两个点A(x1, y1)和B(x2, y2),曼哈顿距离可以表示为:d = |x2-x1| + |y2-y1|。

总结:

就像是一个直角三角形

两个计算距离的公式中,欧氏距离是从C到A,曼哈顿距离是从C到B到A。

3:确定类别

在确定了K值,计算了距离后,选择K个最近邻。

然后根据K个最近邻的标签,针对不同问题不同的计算来确定待预测样本的类别。如果是分类问题,使用多数表决原则,即少数服从多数;如果是回归问题,可以将K个最近邻的标签的平均值作为预测结果。

三 KNN算法实例:

import numpy as np
import matplotlib.pyplot as plt
from math import sqrt
from collections import Counter#用来计算距离最近的点
 
x = [[1.0,1.3],[1.1,1.3],[1.2,1.4],[1.3,1.4],[1.4,1.8],[2.3,3.2],[2.1,3.7],[2.2,3.2],[2.5,3.9],[2.6,3.6]]#敲的样本
y = [0,0,0,0,0,1,1,1,1,1]#标签
Y = np.array(y) 

    
plt.scatter(X[Y==0,0],X[Y==0,1],c='red')
plt.scatter(X[Y==1,0],X[Y==1,1],c='blue')
 
newdata = [2.0,1.0]#挑选的点
plt.scatter(newdata[0],newdata[1],c='yellow')
 
 
#欧氏距离计算距离
dis = []
for i in X:
    d = sqrt(np.sum((i - newdata)**2))
    dis.append(d)
    
#根据距离从小到大排序
near = np.argsort(dis)
 
#设置K值,这里设为3
k = 3
 
#步骤四:确定前k个点所在类别的出现频率
topk = [Y[i] for i in near[:3]]
print(topk)#输出类别
v = Counter(topk)
print(v)#统计topk里,即最短的三个点里,他们所属类别的个数
 
#将设定点分类
v.most_common(1)#输出最频繁出现的类别
v = v.most_common(1)[0][0]
print(v)
 
 
 
plt.show()#绘制散点图。

运行结果

黄色点就是(1.0,2.0),

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值