目录
一 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 = 。
②:曼哈顿距离
公式:
介绍:曼哈顿距离又称为城市街区距离,它是通过计算两点之间在每个维度上的差的绝对值的和来定义的。对于二维空间中的两个点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),