knn最近邻算法适用于什么样的情况,k-近邻算法的优点
另一方面,什么是KNN 1号?概念:KNN (KNN(k-nearesneighbor)是理论上最成熟、最简单的机器学习算法之一。俗话说,“物以类聚,人以群分。”
2.核心思想的一个样本与数据集的K个样本最为相似。如果这K个样本中的大部分属于某个类别,那么这个样本也属于那个类别。即,在该方法中,当执行分类确定时,仅基于最新样本的类别来确定分类目标样本所属的类别。当确定类别时,KNN方法只涉及非常少量的相邻样本。
3.KNN算法步骤3.1。计算距离,给出两个样本。
和
其中n表示特征的数量,x和y向量之间的dsdll距离表示为:
扩展到多维空间后,表达式如下:
现在我知道如何计算距离了。KNN算法最简单也是最残酷的部分,就是计算预测点与所有点的距离,保存并排序,然后选取前k个值,看哪个类别更多。
3.2.按升序排列3.3,去掉第一个k 3.4,加权平均4,k值选择KNN的决策边界一般不是线性的。也就是说,KNN是一个非线性分类器。下面。
1.k越小,越容易拟合。在K=1的情况下,此时只从每个邻居进行预测,如果离目标点最近的点是噪声,则出现错误。此时,模型具有高复杂性、低鲁棒性和危险的决策边界。
2)但如果k太大,远离目标点的样本点也会作用于预测,导致拟合不充分。在这种情况下,模型变得简单,决策边界变得平滑。
3.当K=N时,取所有样本点。这样新点的预测最终会取所有样本点分类中最多的点,分类模型就完全失效了。
4.k的值不能太大或太小。哪个值最好需要通过实验调整参数来确定。
小贴士:
如何选择k的值
经验均方根误差4。KNN算法的优缺点。优点:简单有效的再训练成本低,算法复杂度低,适用于跨领域样本的大样本自动分类。4.2.缺点:惰性类分类不规范,输出解释力不强,不平衡计算量大。2.不用多说,在Python上演示KNN算法,直接代码演示1。根据下图数据猜测《唐人街探案》是那种电影类型。
import movie _ data={ Baby Master :[45,2,9,喜剧电影 },美人鱼:[21,17,5,喜剧电影, 《喜剧片》,《谍战片》: [7,2,57 055-79000,《动作片》: [7,]获取“代孕恋人”的()数据集中所有数据的距离码:[9,38,2,爱情电影,新踏青冒险电影” 请使用x=[22 vin movie _ data . items(:d=math . sqrt))x[0]-v[0])* 2)x[1]-v[1]2))从用于输出到唐人街搜索方案的电影中选择距离print(KNN)K个与KNN . sort(key=lambda dis 3360 dis(1))距离最小的样本按大小升序排序,然后KNN=KNN[:5]print(KNN))确定前K个样本存在的类别的频率,并确定类别标签=. 动作电影:0,爱情电影:0 } for sinknn:label=movie _ data[s[0]]=1 labels=sorted]labels reverse=true(print)labels,labels[0][0],sep=\n )代码示例是https://blog.csdn.net/salt.
2.第二个例子:
数据和代码来自哔哩哔哩致远学院。
很棒的课。
#-* -编码:utf-8-* - @项目:数据摘要@作者:顺利手镯@ file : KNN2 .py @ ide:51336000 py charm @ time:2020-10-21083360 SV)读取, r )作为文件:reader=CSV.dict reader(文件)字典读取文件)forrowinreader 3360 #打印)行)数据=打印(数据)分组:分为两组,一组学习,一组给出结果random.shuffle)数据) )列表顺序混乱,便于剪切。不产生特殊结果n=len(数据)/3 test _ set=数据(0:n)测试集train_set=datas(n:)训练集# KNN开始#距离变形(纹理、周长、面积、平滑度、紧密度、对称性分形维数(:sums=(float)0.5k=5 defknn)(daactal)))652 RES={ result :列车[诊断结果],距离 3360距离返回火车()结果,调用距离方法计算数据和火车之间的距离(对于火车组#中的列车)遍历训练集)#打印((RES),源key=lambda item 3360 item[距离]# print(RES)# 3,提取前的k个RES1=RES(0:k ) #print(RES1),加权平均结果m总距离对于rinres 1,sum=0:对于rinres 13360 result,sum=r[ distance ]]=1-r[sumif result[[ b ]result]测试阶段正确=0 fortestinitest _ set 3360结果结果1=KNN(测试)如果结果==结果1:正确=1打印(正确率为: 653333: )
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。